在express.js函数中使用自定义回调的正确方法是什么?
这是一个例子:
//routes/reset.js
user.save(function(err){
if ( err ) return next(err);
reset.send_reset_email(req, res, user, function(req, res){
req.flash('info', 'Check your email for a link to reset your password.');
res.redirect('/');
});
});
我应该为reset.send_reset_email使用什么签名才能正常工作?
这就是我所拥有的:
exports.send_reset_email = function(req, res, user, next){
//send email
transport.sendMail(options, function(err, responseStatus) {
if (err) {
console.log(err);
} else {
next(req, res);
//do I need to explicitly pass req, res here?
//is next() reserved word here?
}
});
});
我需要在此处明确传递要求吗?
next()保留字在这里吗?
最佳答案
next()接受错误或其他路由,并且通常被调用以继续下一个中间件。
在send_reset_email函数中,next()不是express的next(),因为您传入了function(req,res)而不是next,传入了自己的回调函数来处理sendmail函数的结果。
user.save(function(err){
if (err) return next(err) // if thats express's next()
reset.send_reset_email(req, res, user, function(err, data){
if(err) {
// send err msg
} else {
req.flash('info', 'Check your email for a link to reset your password.');
res.redirect('/');
}
});
});
xports.send_reset_email = function(req, res, user, cb){
//send email
transport.sendMail(options, function(err, responseStatus) {
if (err) return cb(err)
cb(null,responseStatus)
})
})