Passport自定义callback是如何工作的?

我不明白这个例子

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

我看到发生在这里的是

 app.get('path', function(req, res, next) {/*bunch of code*/})(req, res, next) 

如何工作,因为它不是一个函数的引用(req,res,next)?

你的简单例子有点closures,可能是由于括号不匹配等原因。

如果我减less自定义callback的“官方”护照范例,我会得到:

 app.get('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { })(req, res, next); }); 

所以我的第一个假设是(req, res, next)正在被传递给从passport.authenticate返回的符合express-middleware的函数。

如果我在第81行左右的GitHub上查找身份validation代码 ,那么看起来就像刚开始的那样:

 return function authenticate(req, res, next) { /* lots and lots of lines follow */ }