8

私はmongodbでnode.jsを使用しようとしており、http://howtonode.org/express-mongodbのチュートリアルに従っています

接続を開くためのコードは次のとおりです。

ArticleProvider = function(host, port) {
 this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {}));
 this.db.open(function(){});
};

ただし、閉じられている接続が表示されません。しかし、mongo コンソールでログを見ると、接続が開いていて、しばらくすると閉じていることがわかります。

接続は自動的に閉じますか? 多数のクライアントがサーバーにアクセスしようとすると問題になりますか? 接続をどこで閉じる必要がありますか?

ありがとう

トゥコ

4

3 に答える 3

6

このサンプル アプリケーションではArticleProvider、アプリケーションが要求を処理するときに共有するオブジェクトが 1 つだけ作成されます。そのオブジェクトのコンストラクターは、アプリケーションが終了するまで閉じられないデータベース接続を開きます (これは問題ありません)。

したがって、アプリを起動するたびに新しい mongo 接続が取得されますが、サーバーにアクセスするクライアントの数に関係なく、追加の接続は作成されません。アプリを終了するとすぐに、mongo 側で接続が消えているのがわかるはずです。

于 2012-09-11T13:19:17.003 に答える
2

node-mongodb-nativeは Db オブジェクトの close メソッドを提供し、終了したらそれを呼び出して接続を閉じることができます。

var that = this;
this.db.open(function(){
    // do db work here

    // close the connection
    that.db.close();
});

接続を閉じないと、イベント ループによって接続が開かれたままになり、プロセスは終了しません。プロセスが終了しない Web サーバーを構築している場合は、接続を閉じる必要はありません。

のより良いリファレンスはnode-mongodb-nativehttps://github.com/mongodb/node-mongodb-nativeにあります。

于 2012-09-11T11:32:25.263 に答える
0

すべてのコールバックが終了するまで接続が開かれるように、実行される最後のコールバックに db.close を入れることを忘れないでください。そうしないと、次のようなエラーが発生します

/usr/local/lib/node_modules/mongodb/lib/utils.js:97
    process.nextTick(function() { throw err; });
                                        ^
Error
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17)
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47)
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17)
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19)
于 2015-05-14T23:12:37.520 に答える