this call controller in routes file nodejs application running express witha promise based api.
router.post('/create-user', function(req, res) { createusercontroller.createuser( req.body.username, req.body.username ).then( res.jsonsuccess, res.jsonfail ); }); as can see end result of resolved callback above hits res.jsonsuccess , reject (the 2nd param in then function) hits res.jsonfail.
res.jsonsuccess & res.jsonfail custom middlewares project , format , log data accordingly.
my question: want simplify further. possible pass 1 parameter then() handle both resolve , reject?
for example
router.post('/create-user', function(req, res) { createusercontroller.createuser( req.body.username, req.body.username ).then( res.jsonoutdecide ); }); based on accepted answer able put following middleware:
/** * unify json output of response jsonfail , jsonsuccess methods */ module.exports = function(){ return function(req, res, next) { /** * error json output * @param errobj (optional) * @returns {*} */ res.jsonfail = function ( errobj ) { errobj = errobj || {}; return res.json({ success : false, error : errobj }) }; /** * success json output * @param data * @returns {*} */ res.jsonsuccess = function ( data ) { data = data || {}; return res.json({ success: true, data: data }); }; /** * accepts promise , passes onto success or fail options above * @param p * @returns {*} */ res.jsonpromise = function(p) { return p.then(res.jsonsuccess, res.jsonfail); }; next(); }; }; which can used in routes file uses prmoise based controller eg:
router.get('/get-all', function(req, res) { res.jsonpromise( createusercontroller.getallusers( ) ); });
is possible pass 1 parameter
then()handle both resolve , reject?
no.
what want instead define function can pass promise to:
function jsonpromise(res, p) { return p.then(res.jsonsuccess, res.jsonfail); } so can do
router.post('/create-user', function(req, res) { jsonpromise( res, createusercontroller.createuser( req.body.username, req.body.username ) ); }); even more elaborate take whole promise-returning function , decorate it:
function jsonresponse(f) { return function(req, res) { promise.resolve(req).then(f).then(res.jsonsuccess, res.jsonfail); // similar `f(req).…`, catching exceptions , allowing plain return values }; } router.post('/create-user', jsonresponse(function(req) { return createusercontroller.createuser( req.body.username, req.body.username ); }));
Comments
Post a Comment