MongoDB から読み取り、コンテンツを Web ページに出力しようとしています。Mongoから読み取るためにmongodbモジュールを使用しています。
データを正常に読み取って Web ページに出力することはできますが、データベースを閉じるタイミングと http 接続をいつ終了するタイミングがわかりません。したがって、私の Web ページは結果を出力しますが、サーバーが何かを送信するのを待ち続けます。
次の質問を参照しましたが、この特定のシナリオで何をする必要があるか理解できません。
- Node.JS での MongoDB からの読み取りに関するヘルプを探しています
- Nodejs で MongoDB データベース接続を閉じるタイミング
- MongoDB サーバーへのすべての接続を閉じる方法
これが私のコードです:
/* Opens the secondary collection and goes through each entry*/
var getClientIDs = function(collect, res) {
db.collection(collect, function(err, collection) {
var cursor = collection.find();
cursor.each(function(err, item) {
if(item != null) {
console.log(item['_id'] +"\t" + item['name']);
res.write(item['_id'].toString());
res.write("  ");
res.write(item['name'].toString());
res.write("</br>");
}
/*else {
res.end("The End");
db.close();
} Closes connection before other stuff is done. */
});
});
}
/* Opens the main collection and goes through each entry*/
var openCollection = function(collect, res) {
console.log(green);
// Establish connection to db
db.open(function(err, db) {
// Open a collection
db.collection(collect, function(err, collection) {
// Create a cursor
var cursor = collection.find();
// Execute the each command, triggers for each document
cursor.each(function(err, item) {
if(item != null) {
getClientIDs(item['_id'], res);
}
/* else {
db.close();
} This closes the connection before other stuff is done */
});
});
});
}
/* Start Here */
var http = require('http');
var port = 8888;
http.createServer(function (req, res) {
res.writeHead(200,{"Content-Type": "text/html; charset=utf-8"});
openCollection('company',res);
}).listen(port);
データベースには「会社」と呼ばれるコレクションがあり、そこにはたくさんのIDがあります。id の名前を持つ他のコレクションがあります:
company = {{ _id: 'A001' }
{ _id: 'A002' }
{ _id: 'A003' }
}
A001 = {{_id: "A001-01", "name":"foo"}
{_id: "A001-02", "name":"bar"}}
A002 = {{_id: "A002-01", "name":"foo2"}
{_id: "A002-02", "name":"bar2"}}
私はこの方法でコレクションを作成しませんでした。これは私が作業し、Web ページに ID と名前を印刷するだけのスクリプトを作成する必要があったものです。
私のコードでは、ウェブページは次のように出力されます。
A001-01 foo
A001-02 bar
A002-01 foo2
A002-02 bar2
ありがとうございました。