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

Error | length function not identified

Olá,

Estou recebendo o seguinte erro abaixo no meu lista.ejs. Alguêm tem alguma ideia do que pode ser?

TypeError: C:\nodejstraining\app\views\produtos\lista.ejs:14
   12|                 </thead> 
   13|                 <tbody> 
>> 14|                 <% for(var i=0; i < lista.length; i++) {%> 
   15|                     <tr> 
   16|                         <td><%= lista[i].titulo %></td> 
   17|                         <td><%= lista[i].preco %></td> 

Cannot read property 'length' of undefined
   at eval (eval at <anonymous>
<div>
    <div>
        <h2>Listagem de livros</h2>
        <div>
            <table>
                <thead>
                <tr>
                    <td><a href="">titulo</a></td>
                    <td><a href="">preco</a></td>
                    <td><a href="">descricao</a></td>
                </tr>
                </thead>
                <tbody>
                <% for(var i=0; i < lista.length; i++) {%>
                    <tr>
                        <td><%= lista[i].titulo %></td>
                        <td><%= lista[i].preco %></td>
                        <td><p><%= lista[i].descricao%></p></td>
                    </tr>
                <% } %>
                </tbody>
            </table>
        </div>
    </div>
</div>
5 respostas

Opa, parece que a lista não está definida. Deve ter algum erro na sua rota recebe a requisição para a listagem. Posta o código do controller aqui?

Oi Alberto, segue. Peço desculpas mas eu cometi um erro, eu fui vendo as aulas e depois comecei a fazer os exercicios, perdi o fio da miada. É que eu pensei que ao final de cada capitulo teria os codigos.

module.exports = function(app) {
    var listaProdutos = function(req, res) {
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);
        produtosDAO.lista(function(errors,results) {
            res.format ({
                html: function() {
                    res.render('produtos/lista',{lista:results});            
                },
                json: function() {
                    res.json();
                }
            });            
        });
        connection.end();
    };

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

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

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

        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);
        produtosDAO.salva(produto, function(erros, results) {
            produtosDAO.lista(function(erros,results) {
                res.redirect('/produtos');
            });
        });
    });

};

É Alberto... não sei não o que estou fazendo de errado... mesmo erro... :/

solução!

Opa Leandro, meu chute é que ta tendo algum erro na query do Dao e o results do callback ta voltando undefined. Faz assim: antes do res.format dá um console.log(errors);

Tenta entender o erro e corrigir.. Caso não consiga, posta aqui. Se não for isso, coloca seu código no github e manda o link, posso dar uma olhada.

Bingo! Tabela com nome errado! Obrigado!

Server is running... { [Error: ER_NO_SUCH_TABLE: Table 'casadocodigo_nodejs.produtos' doesn't exist] code: 'ER_NO_SUCH_TABLE', errno: 1146, sqlState: '42S02', index: 0 } undefined

Eu tava esperando algo no console do browser mas na verdade ele reporta no terminal do nodemon.

vlw!