为什么可以';我不能在Javascript中访问这个对象的元素吗?

为什么可以';我不能在Javascript中访问这个对象的元素吗?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,在完成web开发课程后,我正在做一个简单的爱好项目,我写的一个简单的中间件有一些问题 有关职能如下: const User = require('../models/user.js'); const middleware = { checkIfAdmin: function checkIfAdmin(req, res, next) { if (req.isAuthenticated()) { User.find({"username&q

在完成web开发课程后,我正在做一个简单的爱好项目,我写的一个简单的中间件有一些问题

有关职能如下:

const User = require('../models/user.js');

const middleware = {
    checkIfAdmin: function checkIfAdmin(req, res, next) {
        if (req.isAuthenticated()) {
            User.find({"username": "jemorgan"}, (err, foundUser) => {
                console.log(foundUser._id);
                if (err) {
                    req.flash("error", "Something went wrong");
                } else if (foundUser._id === req.user._id) {
                    console.log("Going next");
                    next();
                } else {
                    console.log("going back");
                    req.flash("error", "You don't have permission to do that.");
                    res.redirect("back");
                }
            });
        }
    }
}

module.exports = middleware;
当我在没有控制台.log的情况下运行代码时,不管我是否以正确的用户身份登录,都会评估最后一个else分支。我打开
控制台.log
尝试进行故障排除,发现
用户。\u id
未定义。奇怪的是,当我删除
.id
并简单地调用
console.log(user)
时,我得到了以下结果:

[
    {
        _id: 5ef5c1adfc196d47107679ce,
        username: 'jemorgan',
        ...
    }
]
我觉得这里一定有一些简单的东西我错过了。我的故障排除使我相信
User.find()
函数正在数据库中定位正确的文档,并且
foundUser
是对正确对象的引用。然而,当我试图访问该对象的元素时,我被告知它们是未定义的,尽管我可以清楚地看到该对象确实有这些元素

为了简单起见,我在这里不展示整个项目,但是如果有人想了解上下文,那么这个项目就托管在


感谢您提供的任何提示。

您似乎正在使用Mongoose进行查询。查找与否,很容易混淆两者,但第一个将始终返回与查询匹配的文档数组,而第二个将根据查询返回找到的第一个对象。当查询电子邮件/ID等时,您应该使用findOne。

您似乎是通过Mongoose使用.find and not进行查询,很容易混淆两者,但第一个将始终返回与查询匹配的文档数组,而第二个将返回根据查询找到的第一个对象。查询电子邮件/ID等时,应使用findOne。

在您的示例中:

let user=[
    {
        _id: 5ef5c1adfc196d47107679ce,
        username: 'jemorgan',
        ...
    }
]
由于用户是一个数组,因此您无法访问
用户。\u id
,因此您应该
用户[0]?。\u id
在您的示例中:

let user=[
    {
        _id: 5ef5c1adfc196d47107679ce,
        username: 'jemorgan',
        ...
    }
]

由于用户是一个数组,因此您无法访问
user.\u id
,因此您应该
user[0]?。\u id

您需要在查找特定文档时使用.findOne。find返回与查询匹配的结果数组。我不想在我的电脑前尝试这个,但我确信它正是我想要的。非常感谢!请随意复制/粘贴此答案,以便我将其标记为解决方案。如果您想查找特定文档,则需要使用.findOne。find返回与查询匹配的结果数组。我不想在我的电脑前尝试这个,但我确信它正是我想要的。非常感谢!请随意复制/粘贴此答案,以便我将其标记为解决方案。