如何closures到MongoDB服务器的所有连接

我正在使用Node MongoDB本机驱动程序连接到MongoDB数据库:

// Open a connection db.open(function (err, db) { db.close(); }); // Open another connection db.open(function (err, db) { db.close(); }); 

我看到在mongodb.log文件中接受了两个连接,但只有一个连接。 而程序没有退出,我认为它还在等待第二个连接被closures。 你如何closures所有的连接?

你用你的callback参数来隐藏你的variablesdb

试试这个。

 // Open a connection db.open(function (err, p_db) { db.close(); }); // Open another connection db.open(function (err, p_db) { db.close(); }); 

更新:好吧,我想我是在callback中的参数感到困惑,抱歉。 你的问题(从要点),是因为你正在closures它们之前执行两个db.opens与相同的数据库对象。 另外,它看起来像你需要单独的服务器对象,除非你按顺序做事情。

所以,你可以做什么,而是,如果你想保证顺序,是(也是,我有似乎没有_serverState定义的版本,所以我改变它连接):

 console.log('[1]', db.serverConfig.connected); db.open(function (err, db) { console.log('[2]', err, db.serverConfig.connected); db.close(); console.log('[3]', err, db.serverConfig.connected); console.log('[4]', db.serverConfig.connected); db.open(function (err, db) { console.log('[5]', err, db.serverConfig.connected); db.close(); console.log('[6]', err, db.serverConfig.connected); }); }); 

打印:

 [1] false [2] null true [3] null false [4] false [5] null true [6] null false 

或者,您可以定义两个数据库variables – 但您也需要定义两个服务器variables,或者在第一个variablesclosures后挂起。 像这样:

 var mongodb = require('mongodb') , server = new mongodb.Server('localhost', 27017, {}) , server2 = new mongodb.Server('localhost', 27017, {}) , db = new mongodb.Db('test', server, {}) , db2 = new mongodb.Db('test', server2, {}) ; console.log('[1]', db.serverConfig.connected); db.open(function (err, db) { console.log('[2]', err, db.serverConfig.connected); db.close(); console.log('[3]', err, db.serverConfig.connected); }); console.log('[4]', db2.serverConfig.connected); db2.open(function (err, db2) { console.log('[5]', err, db2.serverConfig.connected); db2.close(); console.log('[6]', err, db2.serverConfig.connected); }); 

哪打印(对于我来说,我猜你不能指望1,4,2,3的顺序):

 [1] false [4] false [2] null true [3] null false [5] null true [6] null false