我正在尝试修改我的代码(在passport函数中),以便它从mongodb数据库中读取值,而不是从数组中读取值。
我最初的工作代码如下:
passport.use(
new LocalStrategy(
{
usernameField: "email",
passwordField: "userName"
},
(email, variable, done) => {
let user = users.find((user) => {
return user.email === email
})
if (user) {
done(null, user)
} else {
done(null, false, { message: 'Incorrect username or password'})
}
}
)
)
修改后的代码(除了实际从mongodb获取值的代码外,与初始代码相同)如下(与mongodb的实际连接是在mongoUtil模块中完成的--这里称为mongoUtil模块--运行良好):
passport.use(
new LocalStrategy(
{
usernameField: "email",
passwordField: "userName"
},
(email, variable, done) => {
var user
mongoUtil.connectToServer(function(err, client) {
var db = mongoUtil.getDb()
db.collection('Users').findOne({email}, function(err, result) {
user = result
return user.email === email
})
})
if (user) {
done(null, user)
} else {
done(null, false, { message: 'Incorrect username or password'})
}
}
)
)
但是,用户值不是在使用它的块之外定义的。 既然我已经在函数内的块之前声明了值,为什么不在有问题的块之外定义它呢?
谢谢。 J。
由于db.collection('users').findone({email}
返回一个承诺,因此未设置mongodb回调之外的user变量,回调后的代码将在回调返回值之前执行