3
respostas

Ajuda com o banco de dados

Por favor solicito ajuda na criação do banco de dados pois estou encarando o seguinte erro ao fazer a requisição no navegador, erro apresentado na tela CMD: D:\casadocodigo\node_modules\mysql\lib\protocol\Parser.js:78 throw err; // Rethrow non-MySQL errors ^

Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) at ServerResponse.header (D:\casadocodigo\node_modules\express\lib\response.js:719:10) at ServerResponse.json (D:\casadocodigo\node_modules\express\lib\response.js:247:10) at ServerResponse.send (D:\casadocodigo\node_modules\express\lib\response.js:152:21) at Query._callback (D:\casadocodigo\app\routes\produtos.js:13:8) at Query.Sequence.end (D:\casadocodigo\node_modules\mysql\lib\protocol\sequences\Sequence.js:86:24) at Query._handleFinalResultPacket (D:\casadocodigo\node_modules\mysql\lib\protocol\sequences\Query.js:144:8) at Query.EofPacket (D:\casadocodigo\node_modules\mysql\lib\protocol\sequences\Query.js:128:8) at Protocol._parsePacket (D:\casadocodigo\node_modules\mysql\lib\protocol\Protocol.js:280:23) at Parser.write (D:\casadocodigo\node_modules\mysql\lib\protocol\Parser.js:74:12) [nodemon] app crashed - waiting for file changes before starting...

3 respostas

Oi Rodrigo. Parece que vc ta chamando o método render 2x ou mais para a mesma rota... Posta o trecho de código aqui...

Alberto eu consegui passar por esse problema, porem ao desligar o computador e tentar começar a aula aula 02 vídeo 08, apresenta o seguinte erro, ao fazer a requisição para produtos:

TypeError: D:\casadocodigo\app\views\produtos\lista.ejs:11 9| 10|

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

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

Cannot read property 'length' of undefined at eval (eval at compile (D:\casadocodigo\node_modules\ejs\lib\ejs.js:481:12), :11:26) at returnedFn (D:\casadocodigo\node_modules\ejs\lib\ejs.js:512:17) at View.exports.renderFile [as engine] (D:\casadocodigo\node_modules\ejs\lib\ejs.js:364:31) at View.render (D:\casadocodigo\node_modules\express\lib\view.js:126:8) at tryRender (D:\casadocodigo\node_modules\express\lib\application.js:639:10) at EventEmitter.render (D:\casadocodigo\node_modules\express\lib\application.js:591:3) at ServerResponse.render (D:\casadocodigo\node_modules\express\lib\response.js:960:7) at Query._callback (D:\casadocodigo\app\routes\produtos.js:9:8) at Query.Sequence.end (D:\casadocodigo\node_modules\mysql\lib\protocol\sequences\Sequence.js:86:24) at Query.ErrorPacket (D:\casadocodigo\node_modules\mysql\lib\protocol\sequences\Query.js:94:8)

abaixo segue a linha de códio que foi atualizada: 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(err,results){ res.render('produtos/lista',{lista:results}); });

connection.end();

}); }

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

Na view "/views/produtos/lista.ejs" você faz o loop numa variavel chamada "lista", conforme exemplo abaixo:

 <%for(var i=0;i<lista.length;i++) {%>
                <tr>
                    <td><%=lista[i].id%></td>
                    <td><%=lista[i].titulo%></td>
                    <td><%=lista[i].descricao%></td>
                    <td><%=lista[i].preco%></td>
                </tr>
            <%}%>

O que ocorre é que esta variável está vazia. Você vai ter que fazer a seguinte alteração na sua rota para poder 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(err,results){ 

        if (err){
            console.log(err);
            res.send(err);
            return;
        }

        res.render('produtos/lista',{lista:results}); 
        });

        connection.end();

    }); 

}