为什么我不能在passport.js本地策略回调中创建和执行函数?

时间:2016-07-15 10:11:49

标签: node.js mongoose passport.js

当我尝试拨打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();
            }

        });

    }));




1 个答案:

答案 0 :(得分:2)

正如评论所指出的那样。

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