質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

2724閲覧

Node.jsでMongoDBにアクセスできない

aiai8976

総合スコア112

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2019/07/28 14:12

編集2019/07/30 12:00

前提・実現したいこと

現在、Node.jsをwebサーバとして、クライアントからアクセスがあった時に色々な処理を行うようなプログラムを作成しています。
その一つとしてMongoDBにアクセスし、必要な値を取得する処理があるのですが、うまくアクセスできません。
何か改善点があればコメントよろしくお願いします。

発生している問題・エラーメッセージ

$ sudo node webServer.js Server running at http://localhost:80/ / /js/three.js-master/build/three.min.js /js/OrbitControls.js /get_value レスポンス [] _http_outgoing.js:595 throw new ERR_INVALID_ARG_TYPE('first argument', ^ TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object at write_ (_http_outgoing.js:595:11) at ServerResponse.write (_http_outgoing.js:567:10) at Object.getValue (/home/hasegawa/デスクトップ/akiyama/Node.js/webServer.js:104:17) at Server.<anonymous> (/home/hasegawa/デスクトップ/akiyama/Node.js/webServer.js:128:29) at Server.emit (events.js:198:13) at parserOnIncoming (_http_server.js:677:12) at HTTPParser.parserOnHeadersComplete (_http_common.js:109:17)

「connected successfully」がうまく表示されずに次のログである「レスポンス」が表示されてしまいます。

該当のソースコード

 

// 必要なファイルを読み込み var http = require('http'); var url = require('url'); var fs = require('fs'); var server = http.createServer(); // http.createServerがrequestされたら、(イベントハンドラ) server.on('request', function (req, res) { // Responseオブジェクトを作成し、その中に必要な処理を書いていき、条件によって対応させる var Response = { "renderHTML": function () { var template = fs.readFile('./template/index.html', 'utf-8', function (err, data) { // HTTPレスポンスヘッダを出力する res.writeHead(200, { 'content-Type': 'text/html' }); // HTTPレスポンスボディを出力する res.write(data); res.end(); }); }, "getThree": function () { var template = fs.readFile('./js/three.js-master/build/three.min.js', 'utf-8', function (err, data) { // HTTPレスポンスヘッダを出力する res.writeHead(200, { 'content-Type': 'text/javascript' }); // HTTPレスポンスボディを出力する res.write(data); res.end(); }); }, "getOrbit": function () { var template = fs.readFile('./js/OrbitControls.js', 'utf-8', function (err, data) { // HTTPレスポンスヘッダを出力する res.writeHead(200, { 'content-Type': 'text/javascript' }); // HTTPレスポンスボディを出力する res.write(data); res.end(); }); }, "getValue": function () { const MongoClient = require("mongodb").MongoClient; // 接続文字列 const url = 'mongodb://localhost:27017'; const dbName='study'; const assert=require('assert') var result=new Array(); // MongoDB へ 接続 MongoClient.connect(url, function(err, client){ assert.equal(null,err); console.log("Connected successfully to server"); const db=client.db(dbName); findDocuments(db,function() { client.close(); }); // コレクション中で条件に合致するドキュメントを取得 // collection.find({price: {$lt: 2000}}).toArray((error, documents)=>{ // for (var document of documents) { // console.log(document.name); // } // }); db.close(); }); const findDocuments=function(db,callback) { // コレクションの取得 const collection = db.collection("user"); // コレクションに含まれるドキュメントをすべて取得 collection.find({}).toArray(function(err, documents) { assert.equal(err,null) for (var document of documents) { console.log("Found the following records") result=push(document.dist); result=push(document.rot); } callback(documents); }); } // HTTPレスポンスヘッダを出力する res.writeHead(200, { 'content-Type': 'text/html' }); console.log("レスポンス"); console.log(result); // HTTPレスポンスボディを出力する res.write(result); res.end(); } }; // urlのpathをuriに代入 var uri = url.parse(req.url).pathname; console.log(uri); // URIで行う処理を分岐させる if (uri === "/") { // URLが「http://localhost:8080/」の場合、"renderHTML"の処理を行う Response["renderHTML"](); return; } else if (uri === "/js/three.js-master/build/three.min.js") { // URLが「http://localhost:8080/js/three.js-master/build/three.min.js」の場合、"getThree"の処理を行う Response["getThree"](); return; } else if (uri === "/js/OrbitControls.js") { // URLが「http://localhost:8080/js/OrbitControls.js」の場合、"getOrbit"の処理を行う Response["getOrbit"](); return; } else if (uri === "/get_value") { // URLが「http://localhost:8080/get_value」の場合、"getThree"の処理を行う Response["getValue"](); return; }; }); // 指定されたポート(8080)でコネクションの受け入れを開始する server.listen(80); console.log('Server running at http://localhost:80/');

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

mongo:4.0.10
OS:Ubuntu

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mongoモジュールのバージョンによって引数変わるようです。参考にした書籍もしくはサイトと、実際に使っているmongoのバージョンは合ってますか?
以下の箇所のみ抜粋して、コンソール上で直接コマンド打ってエラーが出るようならお使いのmongoに合うように修正しましょう

MongoClient.connect(url, (error, db) => { var collection; console.log("はいった!!!!!"); // コレクションの取得 collection = db.collection("user"); // コレクションに含まれるドキュメントをすべて取得 collection.find().toArray((error, documents) => { for (var document of documents) { console.log(document.dist); console.log(document.rot); result=push(document.dist); result=push(document.rot); } });

投稿2019/07/29 06:31

hentaiman

総合スコア6389

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiai8976

2019/07/30 12:01

コメントありがとうございます。 指摘通りバージョンは違っていました。 しかし、v4の書き方が調べてみても特に変更が内容に思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問