处理从Node.js失去与MongoDB的连接

10

当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分钟的查询冻结时间?

2个回答

7

如果已经运行了mongodb服务器进程,请运行此示例。 之后,如果停止服务器进程,您会看到显示Error...close。 “on”函数的所有可能事件可以在这里找到

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');
  });
});

3
搜索关键词:节点宕机 离线 断开 重新连接 检测 通知 监控 状态(我找了很久才找到这个答案) - Will Shaver
1
你知道这个是在间歇性断开/重新连接期间触发,还是只有在服务器离线/无法访问时才会发生吗? - pospi

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接