[英]user.findOne() always returns null
我正在嘗試從本地 MongoDB 實例獲取 mongoose 返回數據。 其他一切都運行良好。 該表格正在向護照提供數據。 我還手動將數據插入到 mongodb 中。 唯一的錯誤是在 user.findOne 中。 當我將用戶打印到控制台時,它沒有返回一些數據,而是返回 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);
});
}
));
function 看起來不錯,但嘗試使其異步,然后await
來自數據庫的查詢。 看看我對您的代碼所做的修改。 您可能還想重構代碼並使用 Promise 而不是回調並將所有內容包裝在try{} catch{}
塊中。
但是使 function 異步並等待查詢將解決此問題,這是因為findOne()
方法實際上返回了一個查詢,並且在您控制台之前可能尚未完成。
如果您還有任何問題,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.