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

Erro com ejs depois de criar função da conexão com o banco de dados

Até a aula 7 estava funcionando, depois quando eu alterei a parte de conexão com banco de dados começou a aparecer esse erro:

TypeError: C:\Users\Gisele\Documents\Alura\Node\casadocodigo\app\views\produtos\lista.ejs:10 8|

preco 9|

10| <% for(var i=0; i 11|

12| <%= lista[i].id %> 13| <%= lista[i].titulo %>

Cannot read property 'length' of undefined at eval (eval at (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\ejs\lib\ejs.js:491:12), :11:28) at returnedFn (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\ejs\lib\ejs.js:520:17) at View.exports.renderFile [as engine] (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\ejs\lib\ejs.js:374:31) at View.render (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\view.js:126:8) at tryRender (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\application.js:639:10) at EventEmitter.render (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\application.js:591:3) at ServerResponse.render (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\express\lib\response.js:960:7) at Query._callback (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\app\routes\produtos.js:8:17) at Query.Sequence.end (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\sequences\Sequence.js:86:24) at Query.ErrorPacket (C:\Users\Gisele\Documents\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\sequences\Query.js:94:8)

Não sei se eu pulei alguma etapa ou faltou algum código:

produtosBanco

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

connectionFactory

var mysql  = require('mysql');

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

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

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

        connection.end();

    });
}

lista.ejs

<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].preco %></td>
                    <td><%= lista[i].descricao%></td>
                </tr>
            <% } %>
        </table>
    </body>
</html>

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

Verifica o conteúdo da variável erros, aqui:

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

        connection.end();

    });
}

Dá um console.log(erros), aí no callback da listagem. Vamos ver se encontramos o motivo.

solução!

Achei, minha tabela tinha sido criada como livros e não produtos.

connection.query('select * from livros', callback);

prompt de comando aparece:

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

Obrigada.

Tem como salvar essas mensagens de erro em um txt?