在nodejs中查询mongo数据库时未获得任何结果

osh3o9ms  于 2023-02-18  发布在  Node.js
关注(0)|答案(1)|浏览(143)

我正在尝试像这样查询数据库

const Admin = require("./model/Admin");

    module.exports = {
    
        validateUser : (uName, pwd) => {
            mongoose.connect("mongodb://127.0.0.1:27017/TeamDK")
            
            //console.log("Uname: " + uName + ", Pwd: " + pwd)
            
            res =  Admin.findOne({ initial: "tt" }).exec()
        }        
    }

在上面的例子中,不返回任何结果,res的值为空。
我也试过这样回电话

res =  Admin.findOne({ initial: "tt" }, (err, val) => {
console.log(res)

使用回调函数,res的输出是不同的。我添加了一个屏幕截图,只显示了一部分,因为它非常大。x1c 0d1x
我确信在我的Model collection中有一个文档。当像这样使用monosh时,我得到的是

{
  _id: ObjectId("63ebbd6c59097f4a25f23d31"),
  firstName: 'Test',
  initial: 'tt',
  lastName: 'Unknown',
  email: 'test@gg.com',
  password: '123',
  role: 4
}

如果有用的话,我的模型如下所示:

const adminSchema = mongoose.Schema({
    firstName : { 
        type : String,    
        required : [true, "Why no name?"]
    },
    initial: {
        type: String,
        required: [true, "Why no initials?"],
        index: {unique: true }
    },
    lastName : {
        type : String,
        required : [true, "Why no last name?"]
    },
    email : {
        type : String,
        required : [true, "Then how are we gonna contact you?"],
        index: {unique: true }
    },
    password : {
        type : String,
        required : [true, "Come one man"]
    },
    dateCreate : { 
        type : Date, 
        default : Date.now 
    }, 
    role : {
        type : mongoose.Types.ObjectId,
        ref : "role"
    }     
})

module.exports = mongoose.model("Admin", adminSchema);

我已经花了将近一天的时间试图修复这个问题,尝试在https://mongoosejs.com/上遵循guid,并尝试在stackoverflow上查找类似的问题,但我就是不知道我做错了什么

  • ----------------------更新--------------------------------
    我也尝试过创建函数async,并使用await。我尝试过将代码隔离到一个新文件中,并像这样做
const mongoose = require ("mongoose");
const Admin = require("./model/Admin");

async function testAdmin() {
    await mongoose.connect("mongodb://127.0.0.1:27017/TeamDK")            
    
    res = await Admin.findOne({ initial: "tt" }).exec()

    console.log(res)
}

testAdmin()

我还尝试删除exec()

res = await Admin.findOne({ initial: "tt" })

我仍然得到null返回。任何其他建议都是最受欢迎的

ca1c2owp

ca1c2owp1#

.findOne是异步的,我们必须使用awaitcallback来接收它的结果:

const Admin = require("./model/Admin");

module.exports = {
    validateUser : async (uName, pwd) => {
        await mongoose.connect("mongodb://127.0.0.1:27017/TeamDK") // It's better to put this connect function somewhere else, not in the Model
            
        res = await Admin.findOne({ initial: "tt" });
        return res;
    }        
}

然后使用这样的控制器,例如Express

// The connect function is better here
// mongoose.connect("mongodb://127.0.0.1:27017/TeamDK") 

app.post('/', async (req, res) => {
    const result = await validateUser('username', 'password');
    res.json(result);
})

相关问题