为什么不在db.collection()中callback?find()。toArray(callback)在数据库连接被删除的情况下调用?

我有这个代码:

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

其中db是一个打开的数据库连接到我的本地mongodb服务器。 这工作正常。 但是,如果我手动closures我的MongoDB服务器,而我的应用程序仍在运行,然后执行这一行代码,callback永远不会执行,即使有错误。 这是预期的行为? 我能做些什么来使我的应用程序对丢弃的数据库连接作出反应?

编辑:

我试过这个:

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

再说一次,当连接处于活动状态时,这将起作用,但是当连接被删除时,find()的匿名callback函数会以'err'为空来调用,并且根本不会调用.toArray的callback函数。 如何重写我的代码,以便我得到一个错误,如果db连接不活着?

为了对掉线的连接作出反应,你可以注册close事件的事件监听器,例如

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

您也可以select向您的Mongo连接添加一个auto_reconnect指令,以便尝试重新build立连接,例如

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

有关MongoClient.connect()可用选项的更多详细信息,请参阅文档 。

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