为什么可以';我不能在Javascript中访问这个对象的元素吗?
在完成web开发课程后,我正在做一个简单的爱好项目,我写的一个简单的中间件有一些问题 有关职能如下:为什么可以';我不能在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
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返回与查询匹配的结果数组。我不想在我的电脑前尝试这个,但我确信它正是我想要的。非常感谢!请随意复制/粘贴此答案,以便我将其标记为解决方案。