【问题标题】:adding a property to an object that is part of a sequelize collection not working向属于 sequelize 集合的对象添加属性不起作用
【发布时间】:2022-01-25 20:07:18
【问题描述】:

我有与此类似的代码,我可以添加一个属性,但在这里它不是莫名其妙。

router.get('/', async (req, res, next)  => {

  let produtos = await produto.findAll();


  
  for(let i = 0; i < produtos.length; i++){
    console.log("entrou");
    if(produtos[i].diretorioFotos != null)
    {
     fs.readdirSync('./publico/fotos/' + produtos[i].diretorioFotos).forEach(file => {
        console.log("temtemtete");
       const foto1 = 'http://localhost:3000/fotos/' + produtos[i].diretorioFotos + '/' +  file;
       produtos[i].foto1 = foto1; //the code does reach here
       console.log( produtos[i]);
    });
  }
     

  }

  res.json(produtos); // json goes without the "foto1"

});

生成的json

[{"id":27,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"1","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:07:39.782Z","updatedAt":"2021-12-26T03:07:39.782Z"},{"id":28,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"2","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:09:47.696Z","updatedAt":"2021-12-26T03:09:47.696Z"},{"id":29,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"3","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:10:43.124Z","updatedAt":"2021-12-26T03:10:43.124Z"},{"id":30,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"4","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:11:12.579Z","updatedAt":"2021-12-26T03:11:12.579Z"},{"id":31,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"5","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:11:31.612Z","updatedAt":"2021-12-26T03:11:31.612Z"},{"id":32,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"6","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:12:29.874Z","updatedAt":"2021-12-26T03:12:29.874Z"},{"id":33,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"7","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:13:25.883Z","updatedAt":"2021-12-26T03:13:25.883Z"},{"id":34,"nome":"produto imagem ","descricao":"descrição muito descritiva","preco":"120000","diretorioFotos":"8","ean":null,"sku":"3434234","gtin":"4324234","mpn":"234234","ncm":"324234","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:15:13.790Z","updatedAt":"2021-12-26T03:15:13.790Z"},{"id":35,"nome":"ier2340932098","descricao":"descrição descritiva","preco":"190","diretorioFotos":"9","ean":null,"sku":"342343","gtin":"4234324","mpn":"234234","ncm":"32423432","peso":100,"altura":100,"largura":100,"comprimento":100,"linkVideo":null,"marca":null,"categoria":null,"createdAt":"2021-12-26T03:30:10.286Z","updatedAt":"2021-12-26T03:30:10.286Z"}]

就像我说的那样,我有一个渲染我使用的车把模板的路线我的代码非常相似,我确实可以工作。我试图看到一些差异,但它没有。

【问题讨论】:

  • findAll 到底是什么 - 它是 Sequelize 还是其他 DAO lib 方法?我(有点疯狂)的猜测是,它实际上并没有返回一个对象数组,而是为您提供了一些 ORM 包装的集合;当您向此集合的元素添加属性时,该集合在序列化时会丢失。
  • console.log(produtos[i]); 是做什么的说
  • 基本上说没有“foto1”...
  • 所以fs.readdirSync('./publico/fotos/' + produtos[i].diretorioFotos) 应该是一个缓冲区,在forEach 语句中尝试console.log(file) 看看
  • 我的另一段代码也不起作用......我的错误。我希望我的回答对其他人有所帮助。

标签: javascript node.js express


【解决方案1】:

我将此添加到我的模型中

fotos: {type: DataTypes.VIRTUAL},

这样就成功了。

 router.get('/', async (req, res, next)  => {

  let produtos = await produto.findAll();



  produtos.forEach(result => {
 
    if(result.diretorioFotos != null)
    {
      result.fotos = [];
     fs.readdirSync('./publico/fotos/' + result.diretorioFotos).forEach(file => {
    
       const foto1 = 'http://localhost:3000/fotos/' + result.diretorioFotos + '/' +  file;
     
       result.fotos.push(foto1);
       console.log(result);
    });
  }
    
  });

  


  res.json(produtos);

});

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2018-02-25
    相关资源
    最近更新 更多