>source

내 대화 배열을 매핑하여 이미지 파일 이름 대신 URL 및 축소판 URL을 사용하여 새 개체를 만들려고합니다.

router.get('/', auth, async (req, res) => {
const conversations = await Conversation.findAll({
  include: [
  //   {
  //   model: Message,
  //   where: {
  //     [Op.or]: [
  //       { senderId: req.user.id }, 
  //       { receiverId: req.user.id },
  //     ],
  //   },
  //   required: true, // RIGHT  JOIN
  // },
  {
    Post,
    attributes:["id","title","userId"],
    include: [
      { model: User, attributes: ["id", "name", "email"] },
    { model: Post_Image, attributes: ["id", "images"] },
    ],
  }
],
});
if (!conversations) return res.status(404).send();
const baseUrl = config.get("assetsBaseUrl");
const plainConversations = conversations.map(x=>x.get({ plain: true }));
const resultPosts = [];
for (const post of plainConversations) {
  const { Post_Images, ...postAttributes } = post;
  const IMAGES = Post_Images.map((postImage) => ({
    url: `${baseUrl}${postImage.images}_full.jpg`,
    thumbnailUrl: `${baseUrl}${postImage.images}_thumb.jpg`,
  }));
  resultPosts.push({ ...postAttributes, images: IMAGES });
}
res.send(resultPosts);
});

이 코드를 시도하면 정의되지 않은 속성 맵을 읽을 수 없습니다.

  • 답변 # 1

    문제는 당신이 질문을하고 있다는 사실에 있습니다. Conversations 그런 다음 그들이있는 것처럼 직접 치료 Posts . 실제로 당신은 질문했습니다 Conversations 그리고 포함 Posts 각각과 관계가있는 Conversation , spo 그들은 반환 된 데이터에 존재하지만 각 개체에 중첩됩니다.

    // Conversations query
    const conversations = await Conversation.findAll({
      include: [
        {
          Post,
          attributes:["id","title","userId"],
          include: [
            { model: User, attributes: ["id", "name", "email"] },
            { model: Post_Image, attributes: ["id", "images"] },
          ],
        }
      ],
    });
    // Conversations now look something like
    {
      ...someValues,
      Post: Post (This is the object that contains the Post_Images) | null;
    }[]
    ...
    const plainConversations = conversations.map(x=>x.get({ plain: true }));
    // Previously you were referring to the conversations as posts, 
    // which was generating confusion
    for (conversation of plainConversations) {
      { Post: { Post_Images }, ...ignore } = conversation;
      ...
    }
    
    

    이것이 여러분의 코드에서 무슨 일이 일어나고 있는지 이해하는 데 도움이되기를 바랍니다!

관련 자료

  • 이전 다중 모듈 메이븐 프로젝트 설치
  • 다음 Spring Boot Json 응답이 차단됨