Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sistema não retorna variável lista para a página => TypeError: C:\node\app\views\produtos\lista.ejs:11

Nas primeiras versões da aula o meu sistema montava a tabela normalmente, mesmo no início eu usando a porta 3310 do banco (acrescentei o comando ( port:3310 ) na function createDBConnection do arquivo connectionFactory.js

A partir de determinado momento, não conseguia mais retornar o resultado lista e deu o seguinte erro na tela:

TypeError: C:\node\app\views\produtos\lista.ejs:11 9|

10|

11| <%for(var i=0; i

12|

13|

<%=lista[i].id%>

14|

<%=lista[i].titulo%>

Cannot read property 'length' of undefined at eval (eval at compile (C:\node\node_modules\ejs\lib\ejs.js:618:12), :11:28) at returnedFn (C:\node\node_modules\ejs\lib\ejs.js:653:17) at tryHandleCache (C:\node\node_modules\ejs\lib\ejs.js:251:36) at View.exports.renderFile [as engine] (C:\node\node_modules\ejs\lib\ejs.js:482:10) at View.render (C:\node\node_modules\express\lib\view.js:135:8) at tryRender (C:\node\node_modules\express\lib\application.js:640:10) at Function.render (C:\node\node_modules\express\lib\application.js:592:3) at ServerResponse.render (C:\node\node_modules\express\lib\response.js:1008:7) at Query._callback (C:\node\app\routes\produtos.js:8:17) at Query.Sequence.end (C:\node\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)

Copiei o código do Alura, criei um banco na porta 3306 e continua dando o mesmo erro. Atualizei cada linha junto ao instrutor durante o curso. Não sei mais com achar o problema e agradeço apoio

2 respostas

Oi André,

eu acabei de responder uma dúvida muito parecida com a sua, veja se te ajuda e volta pra dizer se era isso mesmo

https://cursos.alura.com.br/forum/topico-cannot-read-property-length-of-undefined-63048

solução!

Problema: o curso iniciou com uma tabela chamada "livros" e em determinado momento (acho que durante o capítulo 2) eles mudaram o nome da tabela para "produtos"

Esta alteração não foi explicitada em momento algumEla ocorreu no arquivo produtosBanco.js

module.exports = function(){
  return function(connection) {
    this.lista = function(callback){
      connection.query('select * from produtos', callback);
    }
    return this;
  };
}

Para funcionar com a tabela do início do curso, deveria ser: connection.query('select * from livros, callback);

Descobri o erro acrescentando "console.log(err);" no arquivo produtos.js que ficou assim:

module.exports = function(app){
  app.get('/produtos', function(req,res){
    // Conecta o banco de dados
    var connection = app.infra.connectionFactory();
    var produtosBanco = new app.infra.produtosBanco(connection);
    produtosBanco.lista( function(erros, resultados){
      if( erros!=null ){
        console.log(erros);
        res.send(erros);
      }
      else{
        res.render('produtos/lista', {lista:(resultados || [])});
      }
    });
    connection.end();
  });
}

Aí apareceu a mensagem de erro no Terminal, informando que a tabela produtos não existia:

{ Error: ER_NO_SUCH_TABLE: Table 'nodejs.produtos' doesn't exist
    at Query.Sequence._packetToError (C:\node\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)....

Ou seja, o problema está sendo gerado pela sequência do curso, que alterou o nome da tabela e não chamou a atenção para isso,de livros para produtos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software