繁体   English   中英

如果断开数据库连接,为什么不调用db.collection()。find()。toArray(callback)中的回调?

[英]Why doesn't callback in db.collection().find().toArray(callback) get called if database connection is dropped?

我有以下代码:

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);
  });

再次,这在连接处于活动状态时有效,但是当连接断开时,将使用'err'作为null来调用find()的匿名回调函数-根本不调用.toArray的回调。 如何重新编写我的代码,以便在数据库连接不活跃时出现错误?

为了对断开的连接做出反应,您可以为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()的选项的更多详细信息,请参阅文档

关于它不调用.toArray() callback我猜.collection()调用失败,原因是由db表示的连接不再处于活动状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM