【问题标题】:Nodejs - extend command doesn't work as expectedNodejs - 扩展命令无法按预期工作
【发布时间】:2014-03-14 18:06:15
【问题描述】:

我遇到了一个奇怪的情况,我一直使用下划线的extend library_.extend命令,方式如下:

var extended = extend({}, objA, objB);

我只从结果中的一个对象中获取属性,是否有任何关于 extend 的内容可能会阻止它从两个对象中获取所有属性?

我在任何地方都使用过这种模式,到目前为止它似乎按预期工作。两者都是普通对象,而不是数组或函数。

编辑:我尝试制作一个演示,但它似乎可以与 jQuery 和 Underscore 一起使用 - http://jsfiddle.net/x4UHQ/2/

在制作演示时(来自我在日志中打印的对象),我注意到一个在console.log 中打印时没有显示为字符串 - 它是一种猫鼬类型的 ObjectId,也许这是导致问题的原因? (那个特定的字段存在于输出对象中,所以我不知道)

更新:这是解决方案 - UnderscoreJS wont extend object(在 mongoose 查询中添加一个精简选项 - 因为这会以某种方式使对象与下划线不兼容。

【问题讨论】:

  • 将objA和objB的内容放入题中
  • 我将尝试构建一些可以复制问题的东西,我只是觉得这样做太荒谬了,因为这是我希望我的代码在我一直使用的实用命令上破坏的最后一个地方跨度>
  • underscore 库已经过测试,用于大型网站。而extend是最流行的功能之一。所以我会打赌extend中的一个错误。
  • 您是否在偶然寻找recursive extension or deep merging_.extend() 只执行 shallow 合并,或仅执行 objAobjB 自己的属性。它不会合并它们各自持有的对象。
  • objA 的属性名称是否可能与 objB 中的相同?在这种情况下,一个会覆盖另一个。

标签: javascript node.js underscore.js extends


【解决方案1】:

对不起,新的响应,它更适合作为 Madd0g 响应的 cmets(但我不需要它的声誉点)。

你是对的,这是猫鼬对象的错,{lean: true} 是修复它的一个选项,其他选项是调用mongooseObj.field.toJSON() - 在某些情况下它是更方便的方法。例如,如果您在控制器中有用户对象(来自 auth 中间件),并且您需要转换一些字段,那么您不需要从 db 重新获取模型。

【讨论】:

    【解决方案2】:

    所以问题是其中一个对象是来自 mongoose 库的对象,它使扩展命令中断,解决方法是使用精益选项从 mongoose 获取 db 对象。

    类似personModel.find({fname: "Joe"}, null, { lean: true })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2019-07-31
      相关资源
      最近更新 更多