了解Express中的回调

时间:2014-09-06 16:30:28

标签: node.js express passport.js

我想帮助理解passport.js authenticate documentation中的以下示例:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next); //***UNSURE ABOUT THIS***
});

我理解代码的作用 - 但我不知道回调函数末尾的(req, res, next)是什么。为什么有必要?它是否提供(err, user, info)的值?如果是这样的话,为什么我看不到更多以参数结尾的函数调用 - 这可能与传递next对象有关吗?

会爱一个人来帮助我提高对这个概念的理解。

1 个答案:

答案 0 :(得分:2)

请求处理程序是Express中间件;他们得到一个请求,一个响应,以及一种将执行传递给下一层中间件的方法。 passport.authenticate 返回中间件,但尚未附加app.use(),因此您必须手动传递相应的参数。

来自passport.authenticate的回调也有三个参数的事实只是巧合。它们没有相同的值。