2
respostas

Erro Cannot read property 'length' of undefined

Parece que meu código não está retornando uma lista para o EJS

produtosBanco.js

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

        return this;
}

produtos.js

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

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

       produtosBanco.lista(connection, function(erros,resultados){
            console.log(resultados);
            res.render('produtos/lista', {lista:resultados});
       });

        connection.end();
    });

}

express.js

var express = require('express');
var load = require('express-load');

module.exports = function() {

    var app = express();

    app.set('view engine', 'ejs');
    app.set('views', './app/views');

    load('routes', {cwd: 'app'})
    .then('infra')
    .into(app);

    return app;
}
2 respostas

A variável "lista" que você está enviando para a view "produtos/lista" deve estar vazia, porque a variável resultados não está sendo recebida.

Neste caso você precisa tratar a mensagem de erro para identificar o problema

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

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

       produtosBanco.lista(connection, function(erros,resultados){
     if(erros){
                    console.log(erros);
                }
            console.log(resultados);
            res.render('produtos/lista', {lista:resultados});
       });

        connection.end();
    });

}

Daniel, muito boa sua resposta, pois acabou me ajudando aqui!

Eduardo: acredito que você está com o mesmo problema que eu. É que no início do curso, o professor cria a tabela "livros" no banco de dados. E depois, do nada o nome dessa tabela passa a ser "produtos". Desta forma, utilizando o console.log para tratar o erro, conforme nosso amigo Daniel nos sugeriu, obtive a seguinte mensagem:

[Error: ER_NO_SUCH_TABLE: Table 'casadocodigo.produtos' doesn't exist]
  code: 'ER_NO_SUCH_TABLE',

Daí foi só logar no MySQL e conferir o nome da tabela criada anteriormente, e voilà!