UNPKG

mongo-web-handler

Version:

This a helper for creating ExpressJS Web Handler for MongoDB querying.

87 lines (66 loc) 1.95 kB
/** * This helper provides a route handler function generator for expressJs server. * This handler execute a function querying MongoDB et returns the JSon result * in the response * * @module mongo-web-handler * @author Sébastien LANDEAU */ var Q = require('q'); /** * Provides a query result callback * with promise for mongoDB. * * @class MongoFutureResult * @constructor */ function MongoFutureResult( ){ this.expectedResult = Q.defer(); this.getFuture = function (){ return this.expectedResult; } this.execCallback = function ( err, docs ){ if( err ){ this.expectedResult.reject(err); return; } this.expectedResult.resolve( docs ); return; } } var moduleCorpus ={ /** * Returns this model's attributes as... * * @method createMongoWebHandler * @return {function} ExpressJS web handler */ createMongoWebHandler: function( logger, name, queryFunc ){ // Closure function handler( req, res, next ){ var results = new MongoFutureResult(); var callb = results.execCallback.bind( results ); // Querying logger.info( "On [%s], executing '%s'", req.path, name ); // Call query functions queryFunc( req, res, callb ); // Wait for results results.getFuture().promise .then( function(data){ logger.info("> Mongo query '%s' ==> %d result(s)", name, data.length); res.status(200).json( data ); }) .fail( function(err){ logger.error("> Mongo.query '%s', error : ", name, err); res.status(500).json({ status: "error", reason: err}); }); }; return handler; } } /* ================================================================================ EXPORTS ================================================================================ */ module.exports = moduleCorpus;