我希望在 sequelize findAll
方法之后创建一个新属性。
通过使用这种方法setDataValue
我得到
https://sequelize.org/master/class/lib/model.js~Model.html#instance-method-setDataValue
post.controller.js
getPosts: async (req: any, res: Response) => {
await models.Post.findAll({
include: [
{ model: models.User, as: "author", attributes: ["username"] },
{ model: models.Likes }
],
order: [["createdAt", "DESC"]],
limit: 6
}).then(posts => {
posts.setDataValue('test', 'hoot')
res.json(posts);
});
},
最佳答案
在您的示例中 posts
是一个数组,而不是单个对象,因此您不能对其调用 setDataValue()
。如果您想要单个结果,请使用 findOne()
或 findByPk()
。
循环遍历数组以访问返回访问 setDataValue()
的每个实例。或者在您的查询中使用 raw: true
返回原始 JSON 对象,您可以设置键,如果目的是作为 JSON 返回,这将提高性能。
由于您正在使用 async/await,您还应该避免使用 thenables。请尝试以下操作:
getPosts: async (req: any, res: Response) => {
// use async/await here
const posts = await models.Post.findAll({
include: [
{ model: models.User, as: "author", attributes: ["username"] },
{ model: models.Likes }
],
order: [["createdAt", "DESC"]],
limit: 6,
// uncomment this line to return raw JSON objects instead of Model Instances
// raw: true,
});
// loop over each post in the array and convert t
posts.forEach((post) => post.setDataValue('test', 'hoot'));
// return result
// note that you probably want to call post.toJSON()
// or add raw: true to your query
return res.json(posts);
},
关于javascript - setDataValue 不是调用 sequelize findAll 方法后的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58661007/