3
respostas

Problemas com aula 2 de Node.js na lição 8 - Retorno de resultado do DB não pode ser lido

Estou fazendo exatamente igual à lição oito onde é feito uma redução do código para melhorar o entendimento e a legibilidade do código de conexão com o banco de dados, contudo isso não funciona como o esperado e ele não consegue me retornar o resultado do banco de dados.

Esse é o meu arquivo produtos.js:

module.exports = function(app){
    app.get('/produtos',function(req,res){
        var connection = app.infra.connectionFactory();
        var produtosBanco = app.infra.produtosBanco(connection);

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

        connection.end();
    });
}

E este o meu arquivo produtosBanco.js:

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

Ao fazer um console.log(resultados) ele me retorna undefined e a mensagem de erro está na minha lista.ejs, linha 11:

"Cannot read property 'length' of undefined"

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

Pela descrição do erro, o seu template deve estar recebendo a variável "lista" vazia.

Ela é carregada pelo resultado da produtosBanco.lista, "{lista:resultados}", deve estar ocorrendo algum erro na hora de listar.

Tente interceptar o erro para identificar o problema, faça o seguinte ajuste:

 produtosBanco.lista(function(erros,resultados){
            if (erros){
                res.send(erros);
                return;
            }
            res.render('produtos/lista',{lista:resultados});
           });

O problema é que mudaram o nome da tabela nesta aula: PRODUTOS. Até a aula anterior era LIVROS. Daí o mysql dá erro. Se capturar como o Daniel falou, dá:

{ Error: ER_NO_SUCH_TABLE: Table 'casadocodigo.produtos' doesn't exist



ufaaa! consegui!!! criei um novo usuário e uma nova senha no mysql,

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

segue o link para criar o usuário e senha no mysql https://www.digitalocean.com/community/tutorials/como-criar-um-novo-usuario-e-conceder-permissoes-no-mysql-pt