1

将自定义回调与 express.js 函数一起使用的正确方法是什么?

这是一个例子:

//路由/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() 保留字吗?

4

1 回答 1

2

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)
  })
})
于 2012-09-28T22:48:34.820 回答