检查mongoDB是否已连接

时间:2016-09-20 16:13:57

标签: node.js mongodb

我的应用程序中有mongoDB。

我想在收听应用程序之前检查mongoDB是否已连接。

这是最好的方式吗?

这是我的server.js文件:

var express = require('express');
var mongoDb = require('./mongoDb');
var app = express();

init();

function init() {
    if (mongoDb.isConnected()) {
      app.listen(8080, '127.0.0.1');
    }
    else {
      console.log('error');
    }
}

isConnected运行getDbObjectgetDbObject连接到mongoDB并返回一个对象:  connected(true / false),db(dbObject或error)。

然后,isConnected通过连接属性解析/拒绝。

这是mongoDb.js文件:

//lets require/import the mongodb native drivers.
var mongodb = require('mongodb');
// Connection URL. This is where your mongodb server is running.
var url = 'mongodb://localhost:27017/myDb';

var connectingDb; // promise

//We need to work with "MongoClient" interface in order to connect to a mongodb server.
var MongoClient = mongodb.MongoClient;

init();

module.exports = {
    isConnected: isConnected
}

// Use connect method to connect to the Server
function init() {
  connectingDb = new Promise(
    function (resolve, reject) {
      MongoClient.connect(url, function (err, db) {
        if (err) {
          console.log('Unable to connect to the mongoDB server. Error:', err);
          reject(err);
        }
        else {
          console.log('Connection established to', url);

          //Close connection
          //db.close();
          resolve(db);
        }
      });

    }
  );
}

function getDbObject() {
  return connectingDb().then(myDb => {
                                       return {
                                          connected: true,
                                          db: myDb
                                        }
                                      }
                              )
                       .catch(err =>  {
                                        return {
                                          connected: false,
                                          db: err
                                        }
                                      }
                             )
}

function isConnected() {
    return new Promise(
        function(resolve, reject) {
          var obj = getDbObject();
          if (obj.connected == true) {
            console.log('success');
            resolve(true);
          }
          else {
            console.log('error');
            reject(false);
          }
        }
    )

}

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:7)

有多种方法取决于数据库的配置方式。对于独立(单个)实例。你可以使用这样的东西

Db.connect(configuration.url(), function(err, db) {
  assert.equal(null, err);

如果您有配置服务器和多个分片的共享环境,则可以使用

db.serverConfig.isConnected()

答案 1 :(得分:6)

从 3.1 版开始,MongoClient 类具有 isConnected 方法。见https://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#isConnected

示例:

const mongoClient = new MongoClient(MONGO_URL);

async function init() {
  console.log(mongoClient.isConnected()); // false
  await mongoClient.connect();
  console.log(mongoClient.isConnected()); // true
}
init();

答案 2 :(得分:1)

client是从MongoClient.connect返回的对象:

let MongoClient = require('mongodb').MongoClient
let client = await MongoClient.connect(url ...
...

这是我检查连接状态的方法:

function isConnected() {
  return !!client && !!client.topology && client.topology.isConnected()
}

这适用于驱动程序3.1.1版。 找到了here