调用函数并使用express.js传递回调

时间:2012-09-28 06:28:40

标签: node.js callback express

在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()保留字吗?

1 个答案:

答案 0 :(得分:2)

next()接受错误或其他路由,通常会被调用以继续下一个中间件。

在你的send_reset_email函数中你的next()不是express的next(),因为你传入函数(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)
  })
})