1
resposta

throw err; // Rethrow non-MySQL errors

module.exports = function(app){
    app.get('/produtos',function(req,res){
        var mysql = require('mysql');
        var connection = mysql.createConnection({
            host : 'localhost',
            port : 3306,
            user : 'root',
            password : '',
            database : 'casadocodigo_nodejs'
        })

        connection.query('SELECT * FROM produtos', function(err, result){
            console.log(err, result)
            res.send(result)
        });
        connection.on('error', function(err) {
            console.log("[mysql error]",err);
          });

        connection.end();

        res.render("produtos/lista");
    });
}

Meu select esta funcionando mas esta dando erro. No log que dou logo apos o select recebo:

null [ RowDataPacket {
    id: 1,
    titulo: 'Comecando com nodejs',
    descricao: 'livro introdutório sobre nodejs',
    preco: 39.9 },
  RowDataPacket {
    id: 2,
    titulo: 'Comecando com javascript',
    descricao: 'livro introdutório sobre javascript',
    preco: 39.9 },
  RowDataPacket {
    id: 3,
    titulo: 'Comecando com express',
    descricao: 'livro introdutório sobre express',
    preco: 39.9 } ]

Mas mesmo assim recebo um erro que acaba fazendo crashed da aplicação. Segue o erro:

        throw err; // Rethrow non-MySQL errors
        ^

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
    at ServerResponse.header (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\
express\lib\response.js:767:10)
    at ServerResponse.json (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\ex
press\lib\response.js:264:10)
    at ServerResponse.send (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\ex
press\lib\response.js:158:21)
    at Query._callback (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\app\routes\produtos
.js:14:17)
    at Query.Sequence.end (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\mys
ql\lib\protocol\sequences\Sequence.js:88:24)
    at Query._handleFinalResultPacket (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node
_modules\mysql\lib\protocol\sequences\Query.js:139:8)
    at Query.EofPacket (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\mysql\
lib\protocol\sequences\Query.js:123:8)
    at Protocol._parsePacket (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\
mysql\lib\protocol\Protocol.js:279:23)
    at Parser.write (C:\Users\erick\OneDrive\Documentos\Conteudo Faculdade\Alura\Curso Node.js Inovando com Javascript no backend\casaDoCodigo\node_modules\mysql\lib
\protocol\Parser.js:76:12)
[nodemon] app crashed - waiting for file changes before starting...

Se alguem consegui me ajudar agradeço.

1 resposta

Olá, Erick.

Se eu não me engano o método on só existe dentro para o retorno da query. Tenta fazer a segunite alteração no seu código:

module.exports = function(app){
    app.get('/produtos',function(req,res){
        var mysql = require('mysql');
        var connection = mysql.createConnection({
            host : 'localhost',
            port : 3306,
            user : 'root',
            password : '',
            database : 'casadocodigo_nodejs'
        })

        connection.query('SELECT * FROM produtos', function(err, result){
            console.log(err, result)
            res.send(result)
        }).on('error', function(err) {
            console.log("[mysql error]",err);
        });

        connection.end();

        res.render("produtos/lista");
    });
}

Você também pode pegar o retorno do método query e depois chamar o on. Ficará assim:

module.exports = function(app){
    app.get('/produtos',function(req,res){
        var mysql = require('mysql');
        var connection = mysql.createConnection({
            host : 'localhost',
            port : 3306,
            user : 'root',
            password : '',
            database : 'casadocodigo_nodejs'
        })

        var query = connection.query('SELECT * FROM produtos', function(err, result){
            console.log(err, result)
            res.send(result)
        });

    query.on('error', function(err) {
            console.log("[mysql error]",err);
        });

        connection.end();

        res.render("produtos/lista");
    });
}