【问题标题】:Property not being added to JS object属性未添加到 JS 对象
【发布时间】:2015-06-13 01:00:43
【问题描述】:

所以我试图在返回之前向用户对象添加一个字段,并且由于某种原因没有添加该属性。有什么想法吗?

returnUser = function(userRes) {
  console.log(">POST /returnuser< Returning user w/ userId: " + userRes.userId + " deviceToken: " + userRes.deviceToken);
  return Location.findOne({
    users: {
      $elemMatch: {
        user: userRes.userId
      }
    }
  }, function(error, response) {
    userRes.currentLocation = response;
    console.log(userRes);
    return res.send(userRes);
  });
};

所以在 returnUser 函数中,我正在数据库中搜索用户的当前位置,将其添加到 userRes 对象,然后返回它。但是当我记录 userRes 对象时,它不包含该属性。我的代码有问题吗? userRes 目前看起来像这样:

{ _id: 1,
  createTime: 1428477183281,
  deviceId: '982f24khsd',
  deviceToken: 'kjs398fskjjg5fb43ds323',
  firstName: 'Cat',
  lastName: 'Man',
  email: 'cat@mandu.com',
  __v: 0,
  users: [],
  locations: [],
  lngLat: [] }

【问题讨论】:

  • response 的值是多少?是null 还是undefined
  • 为了更清楚,我把它从咖啡改成了javascript。
  • 查询未找到任何匹配项时响应为空
  • 即使我将其简单地更改为字符串或 userRes.currentLocation = 1 它仍然不会将该属性添加到对象中。我认为这与此无关,但我会仔细检查。

标签: javascript json mongodb mongoose


【解决方案1】:

事实证明,该 userRes 对象实际上是从不可变的 mongoose 查询返回的 mongoose 模型实例。

要解决此问题,您最好调用lean(),这将为您提供一个普通的 JS 对象而不是完整的模型实例。

或者,如果您无权访问查询,您可以执行以下操作:

mutableUserRes = JSON.parse(JSON.stringify(userRes));

它复制了整个对象,但它现在是一个简单的 JS 对象而不是 mongoose 模型实例。

【讨论】:

  • 我今天遇到了完全相同的问题。救生员。谢谢!
猜你喜欢
  • 2021-09-19
  • 2018-07-27
  • 2016-09-25
  • 2022-11-19
  • 2014-08-26
  • 2013-09-04
  • 2015-11-15
  • 2015-09-21
  • 2014-05-29
相关资源
最近更新 更多