1

我有这个代码:

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 的回调。如何重写我的代码,以便在 db 连接不活动时出现错误?

4

1 回答 1

1

为了对断开的连接做出反应,您可以为事件注册一个事件侦听器close,例如

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

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

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

有关用于MongoClient.connect().

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

于 2013-07-26T12:31:07.820 回答