有没有办法使用facebookResponse
作为指针函数,而不是使用匿名函数,并让它访问req,res,next
?我考虑过使用 bind
但我不知道如何绑定(bind)路由的 .get()
方法。我没有成功使用 passport.authenticate('facebook',facebookResponse.call(this, req, res, next)
。
auth.route('/auth/facebook/callback')
.get(function(req, res, next) {
passport.authenticate('facebook', facebookResponse);
});
function facebookResponse(err, userDoc, info) {
if (err) { return next(err); }
// I don't think !userDoc will ever happen because of mongo upsert
if (!userDoc) { return res.redirect('/login'); }
req.logIn(userDoc, function(err) {
if (err) { return next(err); }
return res.redirect('http://localhost:9000/users');
});
}
最佳答案
一种方法是使用函数返回函数:
auth.route('/auth/facebook/callback')
.get(function(req, res, next) {
passport.authenticate('facebook', facebookResponse(req, res, next));
});
function facebookResponse(req, res, next) {
return function(err, userDoc, info) {
if (err) { return next(err); }
// I don't think !userDoc will ever happen because of mongo upsert
if (!userDoc) { return res.redirect('/login'); }
req.logIn(userDoc, function(err) {
if (err) { return next(err); }
return res.redirect('http://localhost:9000/users');
});
}
}
在这里,您的内部函数可以访问闭包中的外部函数参数(req
、res
、next
)。
关于javascript - 指针函数是否从 .get() 闭包接收参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536141/