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

Apresentou esse erro já baixei o projeto novamente e em outros passos mas apresenta o mesmo erro em todas as versoes

  9|             </tr>
    10|             <tr>
 >> 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


<html>
    <body>
        <table border="1px">
            <tr>
                <td>id</td>
                <td>nome</td>
                <td>descricao</td>
                <td>preco</td>
            </tr>
            <tr>
                <% for(var i=0; i<lista.length; i++) {%>
                    <tr>
                        <td><%= lista[i].id %></td>
                        <td><%= lista[i].titulo %></td>
                        <td><%= lista[i].preco %></td>
                        <td><%= lista[i].descricao%></td>
                    </tr>
                <% } %>
            </tr>
        </table>
    </body>
</html>
8 respostas

Fala Jonas, tudo bom?

essa lista, está sendo mandada para o arquivo EJS via Node. Pode me mandar qual o código do Node que chama o EJS e passa essa variável?

module.exports = function(app) {

    var listaProdutos = function(req, res) {
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        produtosDAO.lista(function(err, results) {
            res.format({
                html: function() {
                    res.render('produtos/lista', {lista:results});
                },
                json: function() {
                    res.json(results);
                }
            });
        });

        connection.end();
    }

    app.get('/produtos', listaProdutos);

    app.get('/produtos/json', function(req, res) {
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        produtosDAO.lista(function(err, results) {
            res.json(results);
        });

        connection.end();
    });

    app.get('/produtos/form', function(req, res) {
        res.render('produtos/form');
    });

    app.post('/produtos', function(req, res) {
        var produto = req.body;

        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        produtosDAO.salva(produto, function(err, results) {
            res.redirect('/produtos');
        });

        connection.end();
    });
}

Neste ponto do código, de uma checada no valor da variável err e tente verificar se o MySQL possui algum valor cadastrado na tabela que você está utilizando :)

        produtosDAO.lista(function(err, results) {
            res.format({
                html: function() {
                    res.render('produtos/lista', {lista:results});
                },
                json: function() {
                    res.json(results);
                }
            });
        });

Existe valores cadastrados no mysql irei fazer o outro teste.

Beleza, aguardo retorno Jonas \o

Não consegui testar e mesmo baixando o projeto de uma aula posterior que deveria funcionar apresentou o mesmo erro.

Jonas, o teste da variável err, seria um console.log pra gente entender o que acontece naquele momento do código.

        produtosDAO.lista(function(err, results) {
       console.log(err) // insira esta linha e me fala o que aparece como retorno no terminal
            res.format({
                html: function() {
                    res.render('produtos/lista', {lista:results});
                },
                json: function() {
                    res.json(results);
                }
            });
        });
`
solução!

Consegui descobri o problema o meu mysql estava com a senha do meu usuário do windows em vez de esta em branco como pede no curso.

Como não existe nenhuma validação nesta parte de conexão por não ser o foco do curso ele não conectava e apresentava aquele erro.

Obrigado pela ajuda Mario.