为什么不在db.collection()中回调。如果删除数据库连接,则调用find()。toArray(callback)?

时间:2013-07-26 11:39:42

标签: node.js mongodb node-mongodb-native

我有这段代码:

db.collection('users').find({ active: true ).toArray(callback);

其中db是与本地mongodb服务器的已打开数据库连接。这很好用。但是如果我在我的应用程序仍在运行时手动关闭我的mongodb服务器,然后执行这行代码,则回调永远不会执行,甚至不会出错。这是预期的行为吗?我该怎么做才能让我的应用程序对丢弃的数据库连接作出反应?

修改

我试过了:

db.collection('users')
  .find({active: true}, function(err, cursor) {
    if (err) callback(err);
    else cursor.toArray(callback);
  });

同样,这在连接处于活动状态时有效,但是当连接被删除时,find()的匿名回调函数被调用,其中'err'为null - 并且根本不调用.toArray的回调。如何重写我的代码,以便在数据库连接不活动时出现错误?

1 个答案:

答案 0 :(得分:1)

为了对丢弃的连接作出反应,您可以为close事件注册一个事件监听器,例如

db.on('close', function(err) {
    console.error('Connection to Mongo lost: %s', err);
});

您还可以选择向Mongo连接添加auto_reconnect指令,以便尝试重新建立连接,例如

MongoClient.connect(mongoUri, { server: { auto_reconnect: true } }, handleConnect)

有关MongoClient.connect()可用选项的详细信息,请参阅docs

关于它没有调用.toArray() callback,我认为由于.collection()代表的连接不再有效,db调用失败。