如何在Node.js中检查MongoDB连接是否处于活动状态

Zla*_*tko 7 mongoose mongodb node.js

我有一个MongoDB的应用程序作为后端.当应用程序启动时,我会设置连接并在以后的请求中使用它.

但是,如果同时我的db conncetion失败(即mongod崩溃),我如何在请求时间检查?

澄清一下:

  • 目前我有一个"api.js",确实如此 db.once('open', function../* setup */)
  • 根据要求,我做db.find(conditions, function(err, res) { if (err) ...else ...}).

我想要做的是在db.find()子句之前检查连接是否存在.因此,如果它关闭,我可以尝试重新启动数据库连接.

PS我知道,我应该设置一些连接池或类似的连接池,而不是一直保持连接,但现在它设置为原样.

mok*_*oka 5

您可以使用事件将其作为回调来处理.
并且可能有你的全局变量来识别它没有连接.

您可以拥有单独的db.js文件,它将作为模块运行.你可以有功能从中获取收集.

var mongodb = require('mongodb');
var client;
var collections = { };

new mongodb.Db( ... ).open((function (err, c) {
  if (!err) {
    client = c;
    client.on('close', function() {
      client = null; // clear client
      collections = { }; // clear old collections
      // connection closed
    });
  } else {
    // error connecting
  }
});

// get collection
exports.get = function(name, callback) {
  if (client) {
    if (!collections[name]) {
      collections[name] = new mongodb.Collection(client, name);
    }
    callback(null, collections[name]);
  } else {
    // can perform reconnecting and then get collection and call callback
    callback(new Error('not connected'));
  }
}
Run Code Online (Sandbox Code Playgroud)

所以要使用它:

var db = require('./db.js');

db.get('users', function(err, collection) {
  if (!err) {
    collection.find({ ...
  } else {
    console.log(err);
  }
});
Run Code Online (Sandbox Code Playgroud)

对不起,刚刚注意到你使用的是Mongoose,它可能略有不同.

  • 我根本看不出这是如何解决这个问题的。你得到一个错误。这个错误可能是因为很多事情,并不是所有的事情都涉及到连接。 (3认同)