confection
Version:
A configuration management server written in node, using redis for a backend.
73 lines (55 loc) • 1.37 kB
JavaScript
var mongoose = require( 'mongoose' );
var crypto = require( 'crypto' );
var client = false;
var clientConnectErr = null;
var initCallbacks = [];
module.exports.init = function ( params, callback ) {
if ( typeof params === 'function' ) {
callback = params;
params = {};
}
initCallbacks.push( callback );
function flushCallback( callback, err ) {
process.nextTick( function () {
executeCallback( callback, err );
} );
}
function flushInitCallbacks() {
while ( initCallbacks.length > 0 ) {
flushCallback( initCallbacks.shift(), clientConnectErr );
}
}
if ( !client ) {
params = {
url: null
}.mixin( params );
if ( !params.url ) {
return;
}
client = true;
mongoose.connect( params.url );
var errorHandler = function () {
client = null;
clientConnectErr = 'failed to connect';
client.removeListener( 'connect', connectHandler );
flushInitCallbacks();
};
var connectHandler = function () {
clientConnectErr = null;
client.removeListener( 'error', errorHandler );
flushInitCallbacks();
};
client.on( 'connect', connectHandler );
client.on( 'error', errorHandler );
}
else {
flushInitCallbacks();
}
};
function executeCallback() {
var args = Array.prototype.slice.call( arguments );
if ( typeof args[0] === 'function' ) {
args[0].apply( {}, args.slice( 1 ) );
}
}
;