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

Cannot read property 'length' of undefined

Estou tentando exibir as dados em formato json no navegador, mas ele está retornando "Cannot read property 'length' of undefined" quando insiro o link "http://localhost:3000/produtos" no navegador. Segue abaixo o meu código HTML:

IdTítuloDescriçãoPreço
<%for(var i = 0; i < lista.length; i++){ %>
<%=lista[i].id%><%=lista[i].titulo%><%=lista[i].descricao%><%=lista[i].preco%>
<% } %>

O código javascript da página:

module.exports = function(app){ app.get('/produtos', function(req, res){ var mysql = require('mysql'); var connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'casadocodigo_nodejs' });

connection.query('select * from livros', function(err, results){ res.render('produtos/lista',{lista:results}); });

connection.end(); }); }

E o erro que está sendo retornado pelo navegador:

TypeError: /Users/viewitimac/projetos/casadocodigo/app/views/produtos/lista.ejs:14 12| 13|

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

16| <%=lista[i].id%> 17| <%=lista[i].titulo%>

Cannot read property 'length' of undefined at eval (eval at (/Users/viewitimac/projetos/casadocodigo/node_modules/ejs/lib/ejs.js:485:12), :11:31) at returnedFn (/Users/viewitimac/projetos/casadocodigo/node_modules/ejs/lib/ejs.js:514:17) at View.exports.renderFile [as engine] (/Users/viewitimac/projetos/casadocodigo/node_modules/ejs/lib/ejs.js:358:31) at View.render (/Users/viewitimac/projetos/casadocodigo/node_modules/express/lib/view.js:126:8) at tryRender (/Users/viewitimac/projetos/casadocodigo/node_modules/express/lib/application.js:639:10) at EventEmitter.render (/Users/viewitimac/projetos/casadocodigo/node_modules/express/lib/application.js:591:3) at ServerResponse.render (/Users/viewitimac/projetos/casadocodigo/node_modules/express/lib/response.js:961:7) at Query._callback (/Users/viewitimac/projetos/casadocodigo/app/routes/produtos.js:12:8) at Query.Sequence.end (/Users/viewitimac/projetos/casadocodigo/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) at /Users/viewitimac/projetos/casadocodigo/node_modules/mysql/lib/protocol/Protocol.js:399:18

4 respostas

Eu usei o console.log para imprimir o resultado e o erro, e ele tem o seguinte retorno:

Imprimindo o resultado:

console.log(results);

Resposta:

undefined

Imprimindo o erro:

console.log(err);

Resposta:

{ [Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: NO)] code: 'ER_ACCESS_DENIED_ERROR', errno: 1045, sqlState: '28000', fatal: true }

solução!

Olá Diego,

O problema que está acontecendo com você é o mesmo de sua outra questão, você está sem acesso ao banco do mysql. Como houve esse erro de acesso, a variável lista é indefinida, portanto não possuí um atributo 'length'.

Experimente resetar a senha do usuário root, ou crie um novo usuário com uma senha conhecida. Acredito que este seja a solução para os teus problemas.

Um abraço!

Olá Gregory,

Pensando no que você disse, testei na minha máquina com Windows, e funcionou quando executei todo o código do meu banco pelo MySQL Workbeanch. Mas não sei com certeza por que isso afetou aqui. O mesmo problema ocorreu no meu trabalho, onde uso um Mac e não utilizo o Workbeanch, apenas instalei o MySQL seguindo os passos daqui do curso de Node. Vou pesquisar como se faz para resetar a senha lá, e se der certo, já informo aqui e fecho o post.

Aqui como recuperar a senha de root do MySQL:

https://kleberfreitas.wordpress.com/2013/10/16/451/