Node.js 在Sequelize中使用map创建新的普通对象

Node.js 在Sequelize中使用map创建新的普通对象,node.js,sequelize.js,Node.js,Sequelize.js,我正在尝试映射我的对话数组,以创建一个具有url和缩略图url的新对象,而不是图像文件名 router.get('/', auth, async (req, res) => { const conversations = await Conversation.findAll({ include: [ // { // model: Message, // where: { // [Op.or]: [ // { senderId: req

我正在尝试映射我的对话数组,以创建一个具有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);

});

当我尝试这段代码时,我总是发现无法读取未定义的属性映射。

问题在于,您正在查询
对话
,然后直接将其视为
帖子
。实际上,您已经查询了
对话
,然后包含了与每个
对话
有关系的
帖子,它们将出现在返回的数据中,但嵌套在每个对象中

//会话查询
const conversations=wait Conversation.findAll({
包括:[
{
邮递
属性:[“id”、“title”、“userId”],
包括:[
{model:User,属性:[“id”,“name”,“email”]},
{model:Post_Image,属性:[“id”,“images”]},
],
}
],
});
//对话现在看起来像
{
…一些价值观,
Post:Post(这是包含Post_图像的对象)| null;
}[]
...
constplainconversations=conversations.map(x=>x.get({plain:true}));
//之前你把这些对话称为帖子,
//这引起了混乱
for(普通会话的会话){
{Post:{Post_Images},…ignore}=对话;
...
}

我希望这能帮助您理解代码中发生了什么

最可能的问题是以下行
const{Post_Images,…postAttributes}=Post
,你能在下一行的地图之前记录
Post\u Images
的值吗?@CoryHarper我没有定义,所以这告诉你
Post\u Images
不是你正在迭代的
Post
上的属性。尝试在同一行记录
post
,看看它是什么样子
to
const{Post:{Post_Images},…postAttributes}=Post我会留下一个更详细的完整答案。因此,我的代码意味着,对于plainConversation的每个对话,对于每个帖子,忽略现有的PostAttribute并替换为以下PostAttribute?但我现在有一个问题,我的帖子属性(如标题)现在被忽略并替换为图像,如何解决这个问题,以便将新图像添加到现有的帖子属性中?这就是为什么我说在不久的将来您可能会遇到更多问题。您的代码似乎有意修改嵌套在每个
Post
中的
Post\u图像,该图像嵌套在每个
对话中。然而,这不是它目前正在做的事情,无论如何也不合适。这有点超出了你原来的问题的范围,我建议你发布一个全新的问题来得到答案,如果你最终难以解决它。我刚刚解决了这个问题。我没有用图片替换帖子,而是将图片添加到数组中,谢谢