在Node.JS中从中间件函数返回一个对象

我是来自Java背景的Node.JS的新手,我正在使用express来构build这个Rest API。 我想要做的是build立一个经理的概念。 我正在寻找一个优雅的方式返回下面的用户对象:

用户路由:user.js

router.get('/find/:email', function(req, res, next){ userWare.findUserByEmail(req, res, next) }); 

中间件/pipe理器:usermiddleware.js

 module.exports = { findUserByEmail: function(req, res, next) { models.core_user.find({ where:{ email: req.params.email } }).then(function(user){ res.json(user) }, function(err){ res.status(404).json(err); }); }, } 

所以在这个上面的函数,我想返回用户对象的路线,而不是JSON。 这样我就可以从路由中的对象创buildjson。 这个经理类的全部重点将是对象的返回和返回。

你需要做的是用你需要的数据调用callback函数或者返回承诺。

回电话

user.js的

 router.get('/find/:email', function (req, res, next) { userWare.findUserByEmail(req.params.email, function (err, data) { // error as first parameter or null if no error occurred if (err) { return res.status(404).json(err); } res.json(user); }); }); 

usermiddleware.js

 module.exports = { findUserByEmail: function (email, next) { models.core_user.find({ where: { email: email } }).then( function (user) { // async call of callback with user object next(null, user); }, function (err) { // async call of callback with error next(err); } ); } }; 

诺言

你也可以只返回你的模型返回的诺言,然后看起来像这样:

user.js的

 router.get('/find/:email', function (req, res, next) { userWare.findUserByEmail(req.params.email).then( function (user) { res.json(user); }, function (err) { res.status(404).json(err) } ); }); 

usermiddleware.js

 module.exports = { findUserByEmail: function (email) { // return the promise to the caller return models.core_user.find({ where: { email: email } }); } };