【问题标题】:Why can't I create and execute functions in my passport.js local strategy callback?为什么我的 passport.js 本地策略回调中不能创建和执行函数?
【发布时间】:2016-11-18 12:13:12
【问题描述】:

当我尝试调用 saveTheUsr() 时,会导致错误提示 usr is not defined。我只是不明白,为什么它无法访问?我知道我可以简单地排除函数并在回调中包含函数内容,它会起作用。我只想知道一种可以声明 usr 对象并通过回调中的函数调用它的方法。正是我在回调中尝试的方式。那可能吗?为什么我的方法不起作用?

var LocalStrategy   = require('passport-local').Strategy;
var User = require('../app/models/user');

function saveTheUsr(){
  var usr = new User();
  usr.local.email    = email;
  usr.local.password = password;
  usr.save(function(err) {
      if (err)
        throw err;
      return done(null, usr);
  });
}

passport.use('local-signup', new LocalStrategy({
        usernameField : 'username',
        passwordField : 'password',
        passReqToCallback : true
    },
    function(req, email, password, done) {

        User.findOne({ 'local.email' :  email }, function(err, user) {

            if (err)
                return done(err);

            if (user) {
                return done(null, false);
            } else {
                saveTheUsr();
            }

        });

    }));

【问题讨论】:

  • saveTheUsr() 方法超出您的范围,您需要将 emailpassword 作为参数发送到该方法,例如 saveTheUsr(email, password)
  • 看来done 也可能是未定义的。想用堆栈跟踪更新您的问题吗?您需要将done 传递给saveTheUsr() 并更新函数以接收done。先尝试一下,让我们知道它是否适合您
  • 哦,是的,在将 done 作为参数添加后,它就可以工作了!非常感谢!
  • @EllyBolson - 感谢您确认问题。我已经提出了一个答案让你关闭这个问题。如果您能点击勾号,将不胜感激。

标签: node.js mongoose passport.js


【解决方案1】:

正如评论中指出的那样。

问题在于done 变量未在saveTheUsr() 函数中定义。解决方法是让saveTheUsr 接受一个名为done 的额外参数,并为调用它的地方传递一个回调函数。

【讨论】:

    猜你喜欢
    • 2012-04-02
    • 2021-05-22
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2017-02-20
    • 2018-11-10
    • 2015-01-01
    • 2017-09-18
    相关资源
    最近更新 更多