在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 } }); } };