处理从nodejs到mongo db的连接丢失

我试图得到“连接丢失”或类似的连接时,nodejs和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。

另外wtimeout只有当我们有连接到mongodb服务器,并有一个长时间的查询工作。 如果连接丢失,则不起作用。

那么当我失去联系时,我怎么能得到事件或错误呢? 或者减less20分钟查询冻结?

如果有mongodb服务器进程运行,运行这个例子。 之后,如果你停止服务器进程,你会看到Error...close显示。 “开”function的所有可能的事件可以在这里find

 var MongoClient = require('mongodb').MongoClient; // Connect to the db MongoClient.connect('mongodb://localhost:27017/exampleDb', function(err, db) { if(err) { return console.dir(err); } console.log('We are connected'); // db.close(); db.on('close', function () { console.log('Error...close'); }); });