[英]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)檢查元素,並將結果記錄到控制台。 控制台上的結果是一樣的,好像我在沒有檢查的情況下直接記錄對象。
現在,有兩個問題;
//編輯
好,我知道了。 經過一些調查,我意識到,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.