为什么我不能在 passport.js 本地策略回调中创建和执行函数?
Why can't I create and execute functions in my passport.js local strategy callback?
当我尝试调用 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();
}
});
}));
正如评论中指出的那样。
问题在于 done
变量未在 saveTheUsr()
函数中定义。解决方法是让 saveTheUsr
接受一个名为 done
的额外参数,并为调用它的地方传递一个回调函数。
当我尝试调用 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();
}
});
}));
正如评论中指出的那样。
问题在于 done
变量未在 saveTheUsr()
函数中定义。解决方法是让 saveTheUsr
接受一个名为 done
的额外参数,并为调用它的地方传递一个回调函数。