【问题标题】:Stripped Attributes with toJSON/toObject使用 toJSON/toObject 剥离的属性
【发布时间】:2017-10-18 16:25:44
【问题描述】:

我有类似下面的代码:

User.findOne(id)
    .exec((err, user) => {
        Pets.find(_.pluck(user.pets, 'id'))
            .populate("toys")
            .exec((err, petsWithToys) => {
                 user.pets = petsWithToys;
                 return res.ok({ user: user });
             });
    });

当我查看客户端的响应时,我没有看到宠物内部的玩具数组。

我认为这可能是由于在我的 User 模型中覆盖了 toJSON 函数,但即使删除它,我也会得到相同的行为。

另外,我发现如果我将值分配给模型中未定义的新属性,我确实会在客户端看到这些值。 IE。如果我这样做了

user.petsNew = petsWithToys;

我会看到完全填充的属性。

我看过 toObject 的文档,其中说它删除了实例方法 (here),但我不确定为什么该集合被视为一种方法,也不明白在更改值后它仍然是如何删除。

任何 cmets/解释/解决方法?

附:尝试单步执行代码但无法单步执行toObject...

【问题讨论】:

  • 当您在user.pets = petsWithToys; 行设置断点并检查user 时,是否有toys
  • 您使用的是什么版本的 Lodash?因为 v.4 _.pluck 被删除以支持 _.map。见this link
  • @T.J.Crowder - 是的,有 - 它只在 toJSON/toObject 调用中被删除。似乎下面答案中的建议可行(需要测试)。
  • @ZuzuSoftman - 我使用的是 3.10.x,它与sails.js 捆绑在一起 - 不过感谢您的提示 - 我会调查一下。

标签: javascript sails.js waterline


【解决方案1】:

user.pets = petsWithToys;之前添加user = user.toJSON();

查看https://stackoverflow.com/a/43500017/1435132

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多