Javascript 使用find时未调用Sequelize getter

Javascript 使用find时未调用Sequelize getter,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我在模型的属性定义中定义了getter,它们如下所示: timeReported: { type: DataTypes.DATE, defaultValue: Sequelize.NOW, get() { const input = this.getDataValue('timeReported') const output = moment(input).valueOf() return output

我在模型的属性定义中定义了getter,它们如下所示:

timeReported: {
      type: DataTypes.DATE,
      defaultValue: Sequelize.NOW,
      get() {
        const input = this.getDataValue('timeReported')
        const output = moment(input).valueOf()
        return output
      },
      set(input) {
        var output = moment(input).toDate()
        this.setDataValue('timeReported', output)
      },
      validate: {
        isBefore: moment().format('YYYY-MM-DD')
      }
    }
const {dataValues} = yield models.Reporting.findOne({
  where: {
    reportNo: reportNo
  }
})
我已尝试将getter添加到
选项中的
getterMethods
,而不是
属性中的

getterMethods: {
  timeReported: function () {
    debugger
    const input = this.getDataValue('timeReported')
    const output = moment(input).valueOf()
    return output
  }
}
我发现在保存时setter被正确执行,因为我使用时间戳作为请求负载。我还发现验证工作正常。 有趣的是,
afterFind
钩子被正确调用,它确实表明
customGetters
已经注册为我的模型上存在的

但是,在我的模型上调用
find
方法时,如下所示:

timeReported: {
      type: DataTypes.DATE,
      defaultValue: Sequelize.NOW,
      get() {
        const input = this.getDataValue('timeReported')
        const output = moment(input).valueOf()
        return output
      },
      set(input) {
        var output = moment(input).toDate()
        this.setDataValue('timeReported', output)
      },
      validate: {
        isBefore: moment().format('YYYY-MM-DD')
      }
    }
const {dataValues} = yield models.Reporting.findOne({
  where: {
    reportNo: reportNo
  }
})
不会调用My
getter
方法来转换数据以进行表示。在访问数据库之前,如何对从数据库中获取的数据调用这些方法

我已尝试将
raw:false
属性与
where
一起添加到
queryOptions
。那是行不通的


注意:我使用
co
获取数据,我必须从模型中检索
dataValues
属性。所有示例似乎都没有使用该属性。

在使用Sequelize时,不应该像我那样直接使用
dataValues
属性。这将允许我访问存储在表中的底层数据,而无需调用
getter

要在整个实例上调用所有getter函数,请执行以下操作:

const data = instance.get()
这还将填充在模型中定义的任何
虚拟
字段。 要为单个属性调用
getter

const propValue = instance.get('timeReported')

从Sequelize 5开始,似乎需要对属性本身调用getter。在Sequelize 4中,调用
.get()
将调用所有getter函数。现在我们必须调用
.get('timeReported')
(请参阅)。