mongo-web-handler
Version:
This a helper for creating ExpressJS Web Handler for MongoDB querying.
87 lines (66 loc) • 1.95 kB
JavaScript
/**
* 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;