簡體   English   中英

user.findOne() 總是返回 null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM