调用函数并通过express.js传递callback

什么是使用express.js函数自定义callback的正确方法?

这是一个例子:

//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? } }); }); 

我需要显式传递req,res在这里吗? 是下一个()保留字在这里?

next()接受一个错误或另一个路由,并通常被调用来继续下一个中间件。

在你的send_reset_email函数中,你的next()不是express的next(),因为你传递函数(req,res)而不是下一个,传递你自己的callback来处理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) }) })