我正在使用passport.js作为我的节点应用。在自定义回调部分,我找到了以下代码(比如代码A):
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);
});
我的问题是我最后无法理解传球(req,res,next)。如何使用以下代码(比如说代码B):
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);
});
});
});
代码B与代码A的不同之处是什么?
如果我简化代码A,那就像是:
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(..){..})(req, res, next);
});
进一步的
passport.authenticate(..)(req,res,next);
这意味着像
function(..)(req,res,next)
我的问题更多的是理解语法
功能(..)(参数)
答案 0 :(得分:0)
authenticate()
函数的结构如下:
module.exports = function authenticate(passport, name, options, callback) {
// ...
return function authenticate(req, res, next) {
// ...
strategy.success = function(user, info) {
if (callback) {
return callback(null, user, info);
}
}
// ...
})
};
因此需要两个系列参数:
'local'
和回调函数)用于告知护照对您进行身份验证,以及如何执行此操作; req
,res
和next
参数控制您的应用的功能。希望它能帮助你理解!