【发布时间】:2012-03-26 09:05:49
【问题描述】:
在我将对象字符串化并将其发送给客户端之前,我从 mongoose 查询返回结果(对象)并想要替换/删除一些键。
当我 console.log 对象时,一切都很好(列出了所有键,仅此而已)。当我在对象上执行 for..in 时,隐藏字段会突然弹出(而感兴趣的键,不要)。它们是有道理的——它们属于猫鼬——但我不想要它们。在对象上使用 Object.keys 或 Object.getOwnPropertyNames 时也会发生同样的事情 - 隐藏字段弹出窗口,没有用处。
所以我想用 util.inspect(obj,true,null,true) 检查元素并将结果记录到控制台。控制台上的结果是一样的,就好像我在没有检查的情况下直接 console.logged 对象一样。
现在,两个问题;
- 如何正确检查对象,以便真正获得有关该对象的内部/隐藏信息?
- 如何遍历对象并仅获取字段? (是的,我正在 for..in 循环中进行 hasOwnProperty 检查)
//编辑
好的,我明白了。经过一番调查,我意识到 mongoose 对象代理了它的属性并且有一个 toJSON 函数,这就解释了为什么 console.logs 在预期的输出结构中。解决方法是使用Mongoose自带的toObject方法;
mongooseObj.toObject({ getters: true, virtuals: false })
这样,我可以遍历 Object.getOwnPropertyNames 并替换/删除我不想让客户端知道的键!
【问题讨论】:
-
你能稍微改一下你的问题吗?我很难理解你在问什么。 “隐藏字段”是什么意思?它只是原型链更高的属性吗?标记为不可枚举的属性?还是以 _underscore 开头的属性?
标签: javascript node.js mongoose ecmascript-harmony