secondo livello include l'utilizzo di sequelize

Nov 12 2020

se l'utente può avere molti post e ogni post può avere molte immagini, significa che utente e immagini sono associati? perché attualmente sto cercando di mostrare per ogni utente i post e per i post voglio mostrare le immagini come URL e thumbnailurl usando il metodo che hai indicato sopra. Continuo a ricevere un errore che Post_Image non è associato all'utente.

Attualmente sto provando questo codice e continuo a ricevere un errore Impossibile leggere la mappa delle proprietà.

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

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

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

const plainPost = post.get({ plain: true });
const { Post_Images, ...postAttributes } = plainPost;
const IMAGES = Post_Images.map((postImage) => ({
  url: `${baseUrl}${postImage.images}_full.jpg`,
  thumbnailUrl: `${baseUrl}${postImage.images}_thumb.jpg`,
}));

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

Risposte

1 Anatoly Nov 12 2020 at 18:52

In questo caso è simile all'elaborazione di diversi post come nella mia precedente risposta

La differenza è dove chiamare get({ plain: true }):

User.findByPk(id, {
 include: [
  {
    model: Post,
    include: [{ model: Post_Image, attributes: ["id", "images"] }],
  },
],
}).then((user) => { // we got a user here and not a post or posts
if (!user)
  return res.status(404).send();

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

const plainUser = user.get({ plain: true })
const resultPosts = []
for (const post of plainUser.Posts) {
  const { Post_Images, ...postAttributes } = post
  const IMAGES = Post_Images.map((postImage) => ({
    url: `${baseUrl}${postImage.images}_full.jpg`,
    thumbnailUrl: `${baseUrl}${postImage.images}_thumb.jpg`,
  }));
  console.log(IMAGES)
  resultPosts.push({
    ...postAttributes,
    images: IMAGES
  })
}

res.send(resultPosts);