2014-09-06 45 views
2

我想一些幫助從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對象有關嗎?

希望有人幫助我提高對此概念的理解。

回答

2

請求處理程序是Express中間件;他們得到一個請求,一個響應,以及一種將執行傳遞給下一層中間件的方法。 passport.authenticate返回中間件,但它沒有附加app.use(),所以你必須手動傳遞適當的參數。

passport.authenticate回調也有三個參數的事實只是一個巧合。他們不會有相同的價值觀。