当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之后不断上升“超时”事件,并且不考虑keepAlive设置甚至对mongodb的查询。
此外,wtimeout 仅在我们连接到 mongodb 服务器并且有长时间查询时才有效。如果连接丢失,则不起作用。
那么当我失去连接时如何获取事件或错误呢?或者减少 20 分钟的查询冻结?