UNPKG

confection

Version:

A configuration management server written in node, using redis for a backend.

73 lines (55 loc) 1.37 kB
"use strict"; 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 ) ); } }