当Node.js与MongoDB服务器之间的连接丢失时,我希望能够获得“连接丢失”或类似的提示信息。我使用本地驱动程序,并拥有以下代码。
var mongo = require('mongodb');
var server = new mongo.Server('host', 'port', {
auto_reconnect: true,
socketOptions: {
keepAlive: 10,
connectTimeoutMS: 1000,
socketTimeoutMS: 0
}
});
var db = new mongo.Db(
'dbname',
server,
{
w: 1,
wtimeout: 1000,
numberOfRetries: 100,
auto_reconnect: true
}
);
db.on('close', function () {
console.log('Error...close');
});
db.on('error', function (err) {
console.log('Error...error', err);
});
db.on('disconnect', function (err) {
console.log('Error...disconnect', err);
});
db.on('disconnected', function (err) {
console.log('Error...disconnected', err);
});
db.on('parseError', function (err) {
console.log('Error...parse', err);
});
db.on('timeout', function (err) {
console.log('Error...timeout', err);
});
db.collection('collectionName',function(err, collection){
if(err){
console.log('Error...collection', err);
return;
}
// set breakpoint here and break connection to mongo db server
collection.insert({}, function (err, data) {
if (err) {
console.log('Error...insert', err);
}
console.log('Fine!');
});
});
在大约20分钟左右,没有超时或错误出现,插入操作被冻结了。此后我收到了“错误...插入”和连接丢失的错误。
我尝试设置 socketTimeoutMS = 10000 和 keepAlive = 1 例如,但是 socketTimeoutMS 在10000后不断触发“timeout”事件,并且不考虑keepAlive设置甚至是对mongodb的查询。
另外,只有当我们与mongodb服务器建立连接并且有长时间的查询时,wtimeout 才起作用。如果连接丢失,则它将不起作用。
那么,我如何在失去连接时获得事件或错误?或者减少20分钟的查询冻结时间?