簡體   English   中英

為什么我不能在 Javascript 中訪問這個 object 的元素?

[英]Why can't I access the elements of this object in Javascript?

在完成關於 web 開發的 Udemy 課程后,我正在從事一個簡單的愛好項目,並且我編寫的一個簡單中間件遇到了一些問題。

有問題的 function 如下:

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;

當我在沒有console.log的情況下運行代碼時,無論我是否以正確的用戶身份登錄,都會評估最終的 else 分支。 我投入了console.log試圖排除故障,發現user._idundefined 奇怪的是,當我刪除.id並簡單地調用console.log(user)時,我得到以下信息:

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

我覺得這里一定有一些我想念的簡單的東西。 我的故障排除使我相信User.find() function 正在數據庫中找到正確的文檔,並且foundUser是對正確 object 的引用。 然而,當我嘗試訪問 object 的元素時,我被告知它們是未定義的,盡管我可以清楚地看到 object 確實具有這些元素。

為了簡短起見,我不會在這里展示整個項目,但如果有人想要上下文,該項目托管在我的 github上。

感謝您提供的任何提示。

您似乎正在使用.find 而不是.findOne通過 ZCCADCDEDB567ABAE643E15DCF0974E503Z 進行查詢,這很容易混淆兩者,但第一個將始終返回與查詢匹配的文檔數組,而第二個將返回它根據查詢找到的第一個 ZA8CFDE6331B59EB2AC96F8911C4B666Z . 在查詢電子郵件/ID 等時,您應該使用 findOne。

在您的示例中:

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

因為 user 是一個數組,所以你不能訪問user._id ,而是你應該user[0]?._id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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