user.findOne() 总是 returns 空
user.findOne() always returns null
我正在尝试从本地 MongoDB 实例获取猫鼬 return 数据。其他一切 运行 都很好。该表格正在向护照提供数据。我还手动将数据插入到 mongodb 中。唯一的错误在 user.findOne 中。当我将用户打印到控制台时,而不是 returning 一些数据它 returns null
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/member');
// authentication using passport
passport.use(new LocalStrategy({
usernameField: 'user',
passwordField: 'password'
},
function (username, password, done) {
User.findOne({ user: username }, function (err, user) {
// console.log(user, username, password);
if (err) {
console.log(`Error in configuring passport-local \n ${err}`);
return done(err);
}
if (!user) {
console.log(`Invalid username or password!!`)
return done(null, false);
}
return done(null, user);
});
}
));
我的架构:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
user: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
dept: String,
yr: Number,
name: {
type: String
}
}, {
timestamps: true
});
module.exports = mongoose.model('member_list', userSchema, 'member_list');
这是我的完整代码:https://github.com/krush11/site
如果您需要更多信息,请告诉我
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/member');
// authentication using passport
passport.use(new LocalStrategy({
usernameField: 'user',
passwordField: 'password'
},
async function (username, password, done) {
await User.findOne({ user: username }, function (err, user) {
// console.log(user, username, password);
if (err) {
console.log(`Error in configuring passport-local \n ${err}`);
return done(err);
}
if (!user) {
console.log(`Invalid username or password!!`)
return done(null, false);
}
return done(null, user);
});
}
));
该函数看起来不错,但请尝试使其异步,然后 await
来自数据库的查询。看看我对您的代码所做的修改。您可能还想重构代码并使用 promises 而不是回调并将所有内容包装在 try{} catch{}
块中。
但是使函数异步并等待查询将解决这个问题,这是因为 findOne()
方法实际上 returns 一个查询并且在您对其进行控制台之前可能尚未完成。
如果您还有任何问题,请告诉我。
我正在尝试从本地 MongoDB 实例获取猫鼬 return 数据。其他一切 运行 都很好。该表格正在向护照提供数据。我还手动将数据插入到 mongodb 中。唯一的错误在 user.findOne 中。当我将用户打印到控制台时,而不是 returning 一些数据它 returns null
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/member');
// authentication using passport
passport.use(new LocalStrategy({
usernameField: 'user',
passwordField: 'password'
},
function (username, password, done) {
User.findOne({ user: username }, function (err, user) {
// console.log(user, username, password);
if (err) {
console.log(`Error in configuring passport-local \n ${err}`);
return done(err);
}
if (!user) {
console.log(`Invalid username or password!!`)
return done(null, false);
}
return done(null, user);
});
}
));
我的架构:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
user: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
dept: String,
yr: Number,
name: {
type: String
}
}, {
timestamps: true
});
module.exports = mongoose.model('member_list', userSchema, 'member_list');
这是我的完整代码:https://github.com/krush11/site
如果您需要更多信息,请告诉我
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/member');
// authentication using passport
passport.use(new LocalStrategy({
usernameField: 'user',
passwordField: 'password'
},
async function (username, password, done) {
await User.findOne({ user: username }, function (err, user) {
// console.log(user, username, password);
if (err) {
console.log(`Error in configuring passport-local \n ${err}`);
return done(err);
}
if (!user) {
console.log(`Invalid username or password!!`)
return done(null, false);
}
return done(null, user);
});
}
));
该函数看起来不错,但请尝试使其异步,然后 await
来自数据库的查询。看看我对您的代码所做的修改。您可能还想重构代码并使用 promises 而不是回调并将所有内容包装在 try{} catch{}
块中。
但是使函数异步并等待查询将解决这个问题,这是因为 findOne()
方法实际上 returns 一个查询并且在您对其进行控制台之前可能尚未完成。
如果您还有任何问题,请告诉我。