我有这段代码:
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的回调。如何重写我的代码,以便在数据库连接不活动时出现错误?
答案 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
调用失败。