你正在用你的回调参数隐藏你的变量db。
试试这个吧。
// Open a connection
db.open(function (err, p_db) {
db.close();
});
// Open another connection
db.open(function (err, p_db) {
db.close();
});
更新:好吧,我想我对回调中的参数感到困惑,抱歉。
您的问题(来自要点)是因为您在关闭它们之前使用相同的 db 对象执行两个 db.opens。此外,除非您按顺序执行操作,否则您似乎需要单独的服务器对象。
所以,如果你想按顺序保证它,你可以做的是(另外,我拥有的mongodb版本似乎没有定义_serverState,所以我将其更改为connected):
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
或者,您可以定义两个数据库变量——但您还需要定义两个服务器变量,否则在第一个关闭后它会挂起。像这样:
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