操作数据对象sequelize ORM (nodejs)

Ari*_*man 4 node.js express sequelize.js

我有这样的代码:

data = await photo.findOne({
    where : {id}
})
Run Code Online (Sandbox Code Playgroud)

返回数据的

{
     "a" : 2,
     "b" : 5
}
Run Code Online (Sandbox Code Playgroud)

我想操作数据,例如插入一些字段

所以我添加属性:

data.c = data.a * data.b
Run Code Online (Sandbox Code Playgroud)

我在 console.log 中检查添加的数据

{
     "a" : 2,
     "b" : 5,
     "c" " 10
}
Run Code Online (Sandbox Code Playgroud)

但是当我返回 json 时

 return res.status(200).json({message: "success", data })
Run Code Online (Sandbox Code Playgroud)

数据仍然像第一个 { "a" : 2, "b" : 5 }

Bha*_*san 6

你的问题的原因是

Finder 方法旨在从数据库中查询数据。它们不返回普通对象,而是返回模型实例。由于查找器方法返回模型实例,因此您可以按照实例文档中的描述对结果调用任何模型实例成员。

当您data.c = data.a * data.b执行此操作时,您基本上是将属性添加到模型实例而不是数据对象

你可以做类似的事情

dataInstance = await photo.findOne({
    where : {id}
})
data = dataInstance.get({
   plain: true // Important
})
data.c = data.a * data.b;
Run Code Online (Sandbox Code Playgroud)

干杯。不要忘记验证答案。