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

Começou a dar problema no length do lista.ejs depois da atividade 16(isolando o acesso a dados)

Erro:TypeError: C:\Users\andre\Desktop\Files\Projetos para Aprender\Nodejs\casaDoCodigo\app\views\produtos\lista.ejs:11
    9|             </tr>

    10| 

 >> 11|             <%for(var i=0;i<lista.length ;i++){%>

    12|                 <tr>

    13|                     <td><%=lista[i].id%></td>

    14|                     <td><%=lista[i].titulo%></td>


Cannot read property 'length' of undefined

lista.ejs

html>
    <body>
        <table>
            <tr>
                <td>ID</td>
                <td>Titulo</td>
                <td>Descrição</td>
                <td>Preço</td>
            </tr>

            <%for(var i=0;i<lista.length ;i++){%>
                <tr>
                    <td><%=lista[i].id%></td>
                    <td><%=lista[i].titulo%></td>
                    <td><%=lista[i].descricao%></td>
                    <td><%=lista[i].preco%></td>
                </tr>
            <%}%>

        </table>

    </body>
</html>

produtosBanco.js

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

Oi bruno, tudo bem? Acho que o problema é esse return this. Mas cola aqui o arquivo de rota que faz o render da lista por favor?

module.exports = function(app){ app.get('/produtos', function(req, res){

var connection = app.infra.connectionFactory(); var produtosBanco = app.infra.produtosBanco;

produtosBanco.lista(connection, function(error,result){ //res.send(result);

res.render("produtos/lista",{lista:result}); });

connection.end();

}); }

solução!

Deve ser algum problema na hora de consultar o banco de dados. Para identificar o erro, faça o seguinte ajuste na sua rota:

app.get('/produtos', function(req, res){

var connection = app.infra.connectionFactory(); 
var produtosBanco = app.infra.produtosBanco;

produtosBanco.lista(connection, function(error,result){             //res.send(result);
    var conteudo_lista =[];
    if (error){
        console.log(error);
    } else {
        conteudo_lista =result;
      }
    res.render("produtos/lista",{lista:conteudo_lista }); 
});

connection.end();

});

Era problema no banco mesmo, estava puxando de uma tabela produtos, mas a tabela que criei no banco era livros, perdão. Muito obrigado pela ajuda!

Só uma ultima duvida, era para ter a tabela produtos tambem? Ou apenas questao de nome da tabela?

Puxa, verdade, boa observação Daniel!

Não era pra ter produtos mesmo não Bruno, neste caso, estamos tratando apenas de livros. Até onde lembro, é apenas o nome da tabela mesmo.

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