簡體   English   中英

如何檢查/迭代節點中的對象?

[英]how to inspect/iterate over an object in node?

我從一個貓鼬查詢中得到一個結果(該對象),並希望在我對該對象進行字符串化並將其發送到客戶端之前替換/刪除一些鍵。

當我在console.log對象時,一切都很好(列出所有鍵,僅此而已)。 當我在對象上執行for..in時,隱藏的字段突然冒出(並且感興趣的鍵,不要)。 它們有意義 - 它們屬於貓鼬 - 但我不想要它們。 同樣的事情發生,當在Object - hidden字段彈出窗口上使用Object.keys或Object.getOwnPropertyNames時,沒有用。

所以我想用util.inspect(obj,true,null,true)檢查元素,並將結果記錄到控制台。 控制台上的結果是一樣的,好像我在沒有檢查的情況下直接記錄對象。

現在,有兩個問題;

  1. 如何正確檢查對象,以便實際獲取有關對象的內部/隱藏信息?
  2. 如何迭代對象並僅獲取字段? (是的,我在for..in循環中進行hasOwnProperty檢查)

//編輯

好,我知道了。 經過一些調查,我意識到,mongoose對象代理其屬性並具有toJSON函數,這解釋了為什么console.logs處於預期的輸出結構中。 解決方案是使用Mongoose自己的toObject方法;

mongooseObj.toObject({ getters: true, virtuals: false })

這樣,我可以迭代Object.getOwnPropertyNames並替換/刪除我不希望客戶端知道的鍵!

當你真的只想查看數據時,我猜你正在查看由mongoose查詢返回的Document 對象 如果我的猜測是正確的,你可能會想要這樣的東西:

Model.findOne({ name: 'john' }, function (err, doc) {
    var data = doc.toObject();

    // do whatever you need to with data
    delete data.age;
    delete data.weight;
    data.isAwesome = true;

    // now stringify the data and do something with it
    callback(JSON.stringify(data));
});

此外,如果您想從Document訪問某個字段,可以查看:

文檔#得到

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"

暫無
暫無

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

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