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

[AJUDA] Capitulo 2 - Vídeo 2.7

Boa noite, travei nessa aula pessoa. Seguinte, quando chamo a url "http://localhost:3000/produtos", me retorna um erro bastante claro: "Cannot read property 'length' of undefined", eu leio o lenght de lista que vem da função "produtosLista". Eu já debugei essa função e ela vem nula desde o início.

Não há problema com o acesso aos bancos de dados, pois se volto a alguns passos anteriores, quando acessava o banco direto de "produtos.js" retorna os dados e joga na tela normalmente. A aplicação sobe normalmente, só da o erro quando chamo a url. Segue os fontes:

//////////////////////////////////////////////////////////////// //lista.ejs //////////////////////////////////////////////////////////////// <!DOCTYPE html>

Id Nome Descricao Preço <% for(var i = 0; i < lista.length; i++){ %> <%= lista[i].id %> <%= lista[i].titulo %> <%= lista[i].descricao %> <%= lista[i].preco %> <% } %>

//////////////////////////////////////////////////////////////// // 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(errors, resultados){ res.render('produtos/lista', {lista: resultados}); });

connection.end(); }); }

//////////////////////////////////////////////////////////////// // produtosBanco.js ////////////////////////////////////////////////////////////////

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

//////////////////////////////////////////////////////////////// // 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; }

//////////////////////////////////////////////////////////////// // connectionFactory.js ////////////////////////////////////////////////////////////////

var mysql = require('mysql');

var connectMYSQL = function(){ return mysql.createConnection({ host: 'localhost', user: 'root', password: '2013002720', database: 'casadocodigo_nodejs' }); }

module.exports = function(){ return connectMYSQL; }

//////////////////////////////////////////////////////////////// // app.js ////////////////////////////////////////////////////////////////

var app = require('./config/express')(); var rotasProdutos = require('./app/routes/produtos')(app);

app.listen(3000, function(){ console.log('Servidor rodando...'); });

Muito obrigado pela ajuda!

5 respostas

Oi Lucas, realmente olhando o código ainda não consegui descobrir o problema, mas vamos conseguir :). O variável resultados está vindo com qual valor?

Alberto, obrigado por responder.

Seguinte, dentro de produtos.js coloquei o seguinte:

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

O console me retornou o seguinte:

Servidor rodando...
Conteudo de resultados: undefined

Valeu!

Desculpem, não tinha visto o esquema de formatação. Segue os fontes com bloco de codigo para facilitar a visualização:

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(errors, resultados){
            res.render('produtos/lista', {lista: resultados});
        });

        connection.end();
    });
}

PRODUTOSBANCO.JS

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

Oi Lucas,

Se você imprime o valor da variável errors , o que aparece?

solução!

Alberto, valeu cara! Problema resolvido.

Apareceu o seguinte:

conteudo de errors: Error: ER_NO_SUCH_TABLE: Table 'casadocodigo_nodejs.produtos' doesn't
exist

Me perdi em alguma parte que mudou de produtos para livros hehehe, mudei o select de produtos para select * from livros e funcionou!

Valeu cara, muito show o curso. Vou prosseguir aqui..