【问题标题】:third level include sequelize第三级包括续集
【发布时间】:2020-11-17 22:29:12
【问题描述】:

目前我正在尝试为每个用户显示他们喜欢的帖子,并且对于我想使用上述方法将图像显示为 url 和 thumbnailurl 的帖子。

我按照与之前的问题相同的步骤,不断收到错误无法读取属性映射。

router.get("/likes", auth, (req, res) => {

  let { id } = req.user;
 User.findByPk(id, {
include:[{model:Likes,
include: [
  {
    model: Post,
    include: [
      { model: Post_Image, attributes: ["id", "images"]},
    ],
  },
],
  }],
  }).then((user) => {
if (!user)
  return res.status(404).send();

const baseUrl = config.get("assetsBaseUrl");

const plainUser = user.get({ plain: true });
const resultLikes = [];
for (const like of plainUser.Likes) {
  const { Post_Images, ...postAttributes } = like;
  const IMAGES = Post_Images.map((postImage) => ({
    url: `${baseUrl}${postImage.images}_full.jpg`,
    thumbnailUrl: `${baseUrl}${postImage.images}_thumb.jpg`,
  }));

  resultLikes.push({ ...postAttributes, images: IMAGES });
}
res.send(resultLikes);

  });
 });

【问题讨论】:

  • 你确定解构对象后的like包含一个数组吗? resurrn 值也将是一个数组。您能否提供一个简单的示例,说明您希望获得什么,您将获得什么?
  • (node:56344) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'map' of undefined 我目前得到这个

标签: node.js sequelize.js


【解决方案1】:

您错过了一级模型:Post。 您正在尝试从Like 获取帖子的道具。

for (const like of plainUser.Likes) {
  const { Post_Images, ...postAttributes } = like.Post;
  const IMAGES = Post_Images.map((postImage) => ({
    url: `${baseUrl}${postImage.images}_full.jpg`,
    thumbnailUrl: `${baseUrl}${postImage.images}_thumb.jpg`,
  }));

  resultLikes.push({ ...postAttributes, images: IMAGES });
}

【讨论】:

  • 嗨@Anatoly,我刚刚尝试了这个解决方案,我得到了 TypeError: like.Posts is not iterable
  • like的props,应该叫Post
  • 哪一个喜欢道具?这里(const like of plainUser.Likes)或这里(const post of like.Posts)
  • const like of plainUser.Likes
  • 我尝试了 for(const Post of plainUser.Likes){ for (const post of Post.Posts){ 仍然出现错误 Post.Posts is not iterable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2015-11-03
相关资源
最近更新 更多