Maria Maldini Maria Maldini - 2 months ago 17
Node.js Question

Check if mongoDB is connected

I have mongoDB in my app.

I want to check if mongoDB is connected, before I listen to the app.

Is it the best way for doing it?

This is my 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
runs
getDbObject
.
getDbObject
connects to mongoDB and returns an object:
connected (true/false), db (dbObject or error).

Then,
isConnected
resolve/reject by connected property.

This is mongoDb.js file:

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

}


Any help appreciated!

Answer

there are multiple ways depends on how your DB is configured. for a standalone (single) instance. You can use something like this

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

if you have a shared environment with config servers and multiple shards you can use

db.serverConfig.isConnected()
Comments