javascript - 如何检查/迭代 Node 中的对象?

标签 javascript node.js mongoose ecmascript-harmony

我从 mongoose 查询中得到一个结果(对象)并想要替换/删除一些键,然后再将对象字符串化并将其发送给客户端。

当我 console.log 对象时,一切都很好(列出了所有键,仅此而已)。当我在对象上执行 for..in 时,隐藏字段突然弹出(感兴趣的键不会)。它们是有道理的——它们属于 Mongoose ——但我不想要它们。同样的事情发生,当在对象上使用 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));
});

关于javascript - 如何检查/迭代 Node 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625165/

相关文章:

javascript - 更新事件处理程序上的 jQuery 不起作用,我不明白为什么

javascript - 使用 jQuery .attr() 方法获取元素属性

node.js - 使用 Docker 容器的 MEAN 堆栈

javascript - 使用 NodeJS 更新图像

javascript - 当我尝试发出更新请求时,无法在将 header 发送到客户端后设置 header

javascript - 使用 grunt 生成模板 - 寻找任务

javascript - 使用我的 "DragEnter"和 "Dreagleave"函数在 Firefox 浏览器上进行 Knockout.js 拖放操作时出现问题

javascript - Node.js - 页面超时 - 发送后无法设置标题

arrays - 根据对象属性查询 Mongoose 文档

node.js - Mongodb atlas + node.js 在本地工作,但在推送到 Heroku 时停止