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

08-06 04:40