2016-09-20 173 views
5

我在我的應用程序中有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並返回一個對象: 連接(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); 
      } 
     } 
    ) 

} 

任何幫助表示讚賞!

回答

4

有多種方法取決於您的數據庫配置方式。用於獨立(單一)實例。您可以使用類似這樣

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

,如果你有配置服務器和多個碎片共享環境中,你可以使用

db.serverConfig.isConnected()