首页 > 解决方案 > Sequelize 无法将虚拟属性添加到 findAll 响应

问题描述

我有两个查询如下:

getPosts - models.Posts.findAll({where: userId});

getPost-models.Post.findByPk(id);

Posts 有一个虚拟属性 postTemplate ,它本质上是一个在前端和后端之间传递的值对象,这样:

postTemplate: {
    type: DataTypes.VIRTUAL
}

API 函数(在这种情况下恰好是 GraphQL 解析器)在返回数据之前附加了虚拟属性。

let post = models.Post.findByPk(id);
post.postTemplate = "blah blah blah";
return post;

现在,这行得通。但是,当我尝试对 getPosts (findAll) 执行相同操作时,它似乎不想附加该属性。

我在循环中和通过键都试过了,但都无济于事。我相信我误解了批量记录的返回方式。

let posts = models.Post.findall();
posts.forEach(async (post) => {
    post.postTemplate = "blah blah blah";
})
return posts; // this doesn't work

标签: node.jssequelize.jsapollo-server

解决方案


你可以试试这样的东西吗?我怀疑它不起作用,因为它是一个异步函数

async function(req, res) {
  let posts = await models.Post.findall();
  posts.forEach((post) => {
      post.postTemplate = "blah blah blah";
  })
  return posts;
}


推荐阅读