2016-09-20 12 views
5

Mam mongoDB w mojej aplikacji.Sprawdź, czy mongoDB jest podłączony

Chcę sprawdzić, czy mongoDB jest podłączony, zanim posłucham aplikacji.

Czy to najlepszy sposób na zrobienie tego?

To mój server.js file:

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 biegnie getDbObject. getDbObject łączy się z mongoDB i zwraca obiekt: podłączony (true/false), db (dbObject lub błąd).

Następnie, isConnected rozstrzygnięcie/odrzucenie przez połączoną właściwość.

Jest to plik 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); 
      } 
     } 
    ) 

} 

Każda pomoc mile widziana!

Odpowiedz

4

Istnieje wiele sposobów zależnych od konfiguracji bazy danych. dla samodzielnej (pojedynczej) instancji. Można użyć coś jak ten

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

jeśli mają wspólną środowisko z serwerami config i wielu odłamków można użyć

db.serverConfig.isConnected()