mongo-getdb
Version:
A very opinionated way to connect with the mongodb driver.
74 lines (62 loc) • 1.85 kB
JavaScript
const MongoClient = require("mongodb").MongoClient;
const async = require('async');
const util = require('util');
const configs = {};
const connectCb = util.callbackify(MongoClient.connect);
const MemoizedConnect = async.memoize(function (alias, callback) {
if (!(alias in configs)) {
throw new Error('unknown ' + alias + ' config');
}
connectCb.apply(MongoClient, configs[alias].concat([callback]));
});
const isMongoUrl = (str) => str.indexOf('mongodb://') === 0 || str.indexOf('mongodb+srv://') === 0;
const getDb = module.exports = function(alias, callback) {
if ( !(alias in configs) && typeof alias == 'string' && isMongoUrl(alias) ) {
//directly using a connection string as alias.
configs[alias] = [alias];
}
if (typeof alias === 'function') {
callback = alias;
alias = 'default';
}
const done = function (err, client) {
let db;
if(client && client.constructor == MongoClient) {
db = client.db();
db.client = client;
} else {
db = client;
}
if (callback.length === 1) {
if (err) {
console.error('Error connecting to the db, exiting: \n', err);
return process.exit(1);
} else {
return callback(db);
}
} else {
callback(err, db);
}
};
MemoizedConnect(alias, function (err, db) {
if (err) {
return done(err);
}
done(null, db);
});
};
getDb.init = function () {
var args = [].slice.call(arguments, 0);
var alias = 'default';
if (args.length === 0) {
alias = 'default';
args = [process.env.DB];
}
if (typeof arguments[0] === 'string' && typeof arguments[1] === 'string'){
alias = args[0];
args = args.slice(1);
}
delete MemoizedConnect.memo[alias];
configs[alias] = args;
};
getDb.legacyHapi = require('./legacy-hapi')(getDb);