【问题标题】:How ejs Extract values from objectejs如何从对象中提取值
【发布时间】:2019-07-25 22:11:46
【问题描述】:

我正在使用 Sequelize,我使用 findAll 从表中获取所有数据。这基本上是一个对象数组。似乎令人困惑的是,我作为输出显示的数据嵌套在对象下。 (听起来很混乱?让我澄清一下)

所以,让我有这个短代码

如果我在这里运行这段代码,它会给我取消定义,因为 father 位于 parent 中,为此我必须使用 user.parent.father,对吗?

好的,现在在我的代码中从表中获取数据,

我 console.log 我的第一行,我得到了这个。

现在我需要的值在 dataValues 中。

在我的 ejs 文件中。我正在使用简单的 for-of 循​​环

现在我的问题是为什么我没有为 product.title 、 product.imageUrl 等定义 undefined ?它应该通过 product.dataValues.title 获取这些数据。因为它位于另一个对象名称 dataValues 中。

【问题讨论】:

  • for...of 语句创建一个循环遍历可迭代对象,包括:内置 String、Array、类数组对象(例如,参数或 NodeList)、TypedArray、Map、Set、和用户定义的可迭代对象。**它调用一个自定义迭代钩子,其中包含要为对象的每个不同属性的值执行的语句**
  • 不确定您显示的console.log 是否被截断,但属性应该存在,就在所有这些内部(dataValues_previousDataValues 等)之后。

标签: node.js sequelize.js ejs


【解决方案1】:

从技术上讲,当一个值被 Sequelize 初始化时,你的对象的原型被设置为Model(类太长,无法在此处复制粘贴)。

创建模型时,Sequelize 会在其上调用 init(第 424 行),然后调用 refreshAttributes

这个调用 Object.defineProperty 为您在元数据中定义的每个属性定义 getter 和 setter(第 1238 行)。

getter 和 setter 分别设置为 getset 函数(第 1095 到 1103 行)。

这实际上意味着

instance.field

只是一个被包裹的属性

instance.get('field')

这对应于their docs,上面写着

实例实例使用dataValues 属性的概念进行操作,该属性存储实例表示的实际值。默认情况下,dataValues中的值也可以直接从Instance中访问,即:

instance.field

一样

instance.get('field')

一样

instance.getDataValue('field')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2015-02-21
    • 2015-03-27
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多