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