jap*_*ott 5 javascript mongoose node.js ecmascript-harmony
我从一个猫鼬查询中得到一个结果(该对象),并希望在我对该对象进行字符串化并将其发送到客户端之前替换/删除一些键.
当我在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 })
Run Code Online (Sandbox Code Playgroud)
这样,我可以迭代Object.getOwnPropertyNames并替换/删除我不希望客户端知道的键!
小智 4
我猜测当您真的只想查看数据时,您正在查看猫鼬查询返回的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));
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1811 次 |
最近记录: |