javascript - 指针函数是否从 .get() 闭包接收参数?

标签 javascript

有没有办法使用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');
        });        
    }
}

在这里,您的内部函数可以访问闭包中的外部函数参数(reqresnext)。

关于javascript - 指针函数是否从 .get() 闭包接收参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536141/

相关文章:

javascript - 在场景中维护一个动画 div

javascript - 如何根据值选项选择显示不同的输入框

javascript - 三列,每列中的顶部 block 仅固定在列内滚动

javascript - 在 Seaside JQuery 回调中获取 Javascript 接收器的值

javascript - 通过 jquery 添加时表格不可见且按钮不起作用

javascript - 预加载所有类型图像的最佳方式是什么?

javascript - 删除隐藏字段后 Django 中发生 CSRF 错误

javascript - 使用 Javascript 函数而不调用

javascript - Bootstrap Summernote 重置/清除

javascript - 覆盖 Gulp 中第二个源的文件