无法closures与Node.js的MongoDB连接?

看来,我不能closures与Node.js本地驱动程序的MongoDB连接。 当我运行node replica.js脚本永远不会结束,因此连接不能由于某种原因closures。

这是代码。 这是一个副本集,但我不认为这是一个问题:

 var mongodb = require('mongodb') , Db = mongodb.Db , Server = mongodb.Server , ReplSet = mongodb.ReplSet; // Replica set var replSet = new ReplSet( [ new Server('localhost', 27017), // Primary new Server('localhost', 27018), // Secondary new Server('localhost', 27016), // Secondary ], { rs_name: 'replica', read_secondary: true } ); var db = new Db('test', replSet, { native_parser: true, w: 1 }); // Opening db.open(function (err, db) { if (err) console.error(err); db.close(); }); 

连接到一个单一的mongod实例工作得很好,连接closures,脚本结束, process.exit()调用没有需要(由robertklepbuild议process.exit()

 var mongodb = require('mongodb') , Db = mongodb.Db , Server = mongodb.Server; // Single instance var server = new Server('localhost', 27017): var db = new Db('test', server, { native_parser: true, w: 1 }); // Opening db.open(function (err, db) { if (err) console.error(err); db.close(); }); 

事实certificate,这是一个bug,现在已经在1.3.6中修复了。 看看我前几天开的这个问题 。 有趣的是,这是我第一次与MongoDB …

在这种情况下,您可能需要强制连接池closures,通过将true作为第一个参数close 。 您还应该提供callback,以便在closures时提醒您有任何问题:

 db.open(function (err, db) { if (err) console.error(err); db.close(true, function (err) { if (err) console.error(err); else console.log("close complete"); }); });