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

Erro no length

Na aula anterior quando era para ser mostrado na tela a lista que criei no banco de dados, nada aparecia. Contudo, ao continuar para saber se poderia ser corrigido, agora dá erro no 'length' da lista e estou travada. Conferi o banco de dados:

mysql> describe livros;
+----+--------------------------+-------------------------------------+-------+
|  1 | Comecando com nodejs     | livro introdutório sobre nodejs     | 39.90 |
|  2 | Comecando com javascript | livro introdutório sobre javascript | 39.90 |
|  3 | Comecando com express    | livro introdutório sobre express    | 39.90 |
+----+--------------------------+-------------------------------------+-------+
3 rows in set (0.00 sec)

mysql>

Na lista.ejs está assim:

<html>
    <body>
        <table>
            <tr>
                <td>id</td>
                <td>titulo</td>
                <td>descricao</td>
                <td>preco</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>
            <%}%>
            <tr>
            </tr>
        </table>
    </body>
</html>

produtos.js está assim:

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

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

        connection.end();

    });
}

E o erro dado:

TypeError: C:\Users\Ádri Souza\casadocodigo\app\views\produtos\lista.ejs:10
    8|                 <td>preco</td>

    9|             </tr>

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

    11|                 <tr>

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

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


Cannot read property 'length' of undefined
    at eval (eval at compile (C:\Users\Ádri Souza\casadocodigo\node_modules\ejs\lib\ejs.js:618:12), <anonymous>:11:27)
    at returnedFn (C:\Users\Ádri Souza\casadocodigo\node_modules\ejs\lib\ejs.js:653:17)
    at tryHandleCache (C:\Users\Ádri Souza\casadocodigo\node_modules\ejs\lib\ejs.js:251:36)
    at View.exports.renderFile [as engine] (C:\Users\Ádri Souza\casadocodigo\node_modules\ejs\lib\ejs.js:482:10)
    at View.render (C:\Users\Ádri Souza\casadocodigo\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\Ádri Souza\casadocodigo\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\Ádri Souza\casadocodigo\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\Ádri Souza\casadocodigo\node_modules\express\lib\response.js:1008:7)
    at Query.<anonymous> (C:\Users\Ádri Souza\casadocodigo\app\routes\produtos.js:12:17)
    at Query.<anonymous> (C:\Users\Ádri Souza\casadocodigo\node_modules\mysql\lib\Connection.js:502:10)

Definitivamente, não sei mais aonde mexer.

Obrigada.

7 respostas

Boa tarde, Ana! Como vai?

O seu código parece estar correto! Tem um outro aluno com o mesmo problema que vc e ontem eu dei essa resposta pra ele. Dá uma olhada lá e veja se te ajuda!

Se não resolver, é só dizer aqui que eu continuo tentando te ajudar!

Grande abraço e bons estudos!

Boa tarde, Vou indo, estou dois dias revendo todas as aulas e refazendo o código e achei, talvez, o erro. O erro está que eu criei o banco de dados pelo prompt do MYSQL, nele eu tenho o banco de dados e de forma alguma eu consigo no prompt do NodeJs isto: mysql -u root Acredito eu que o erro é esta conexão com o entre o NodeJs e o MySQL, que eu infelizmente, não sou apta para resolver. Desculpe-me se for muito boba a dúvida, mas é exatamente este problema. A partir da aula 07, eu não consigo mais ter o resultado na tela do navegador. O servidor está funcionando, tudo certinho e refeito. Obrigada.

Opa, Ana! Não precisa se desculpar por nada! Estamos todos aqui pra ensinar e aprender uns com os outros! Pode ficar tranquila!

Em relação a sua questão, o que acontece quando vc executa o comando mysql -u root no terminal? Dá alguma mensagem de erro ou algo do tipo?

Opa, de boa então! O erro acontece é isto:

C:\Users\Ádri Souza\cscodigo>mysql -u root
'mysql' is not recognized as an internal or external command,
operable program or batch file.
solução!

Ana, esse seu erro indica duas possibilidades!

  1. O mysql não está instalado na sua máquina. Se esse for o caso, vc precisa baixar o instalador para Windows aqui.

  2. O instalador do mysql não fez o trabalho correto durante a instalação e deixou de modificar a variável de ambiente PATH. Para isso, siga esse passo-a-passo dado pelo próprio site do mysql.

Depois veja se vc consegue acessar a linha de comando e executar o comando mysql -u root e me diga o resultado aqui, por favor, pra que eu possa continuar a te ajudar.

Muito obrigada! Era o path mesmo que precisava ser configurado! Duas noites sem dormir me achando muito burra. AGORA SIM! Animada para continuar!

Aê, Ana! Agora sim! Pega essa animação e manda ver aí no curso!

Sempre que precisar de alguma ajuda é só mandar aqui no fórum!

Grande abraço e bons estudos!