2012-09-11 14 views
8

私はMongoDBを持つのNode.jsを使用しようとしています接続を閉じると、MongoDBのはのNode.jsは接続を開くため<a href="http://howtonode.org/express-mongodb" rel="noreferrer">http://howtonode.org/express-mongodb</a></p> <p>コードでチュートリアル以下

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

は、しかし、私はすべての接続を見ることができないです閉じている。 しかし、私はmongoコンソールのログを見ると、私はそれが開いていると彼らがいくつかの時間の後に閉じていることがわかります。

接続が自動的に閉じますか?大量のクライアントがサーバーにアクセスしようとすると問題になるのですか?接続をどこで閉じるべきですか?

おかげ

Tuco

答えて

6

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

あなたが見なければならないのは、アプリを起動するたびに新しいmongo接続が得られることですが、何人のクライアントがサーバーにアクセスしても、追加の接続は行われません。そして、あなたがあなたのアプリを終了した直後に、あなたの接続がmongo側で消えるのを見てください。

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-nativeのより良い参考文献は、https://github.com/mongodb/node-mongodb-nativeで見つけることができます。

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) 
のようなエラーが表示されます。
関連する問題

 関連する問題