3
respostas

Inserir no Banco erro ---> events.js:141

Pessoal , já procurei aqui no forum , mas como não achei estou Postando a duvida.

Estou com um erro na hora de persistir o dado no Mysql

esse é o erro

events.js:141
      throw er; // Unhandled 'error' event
      ^
Error: Cannot enqueue Quit after invoking quit.

Na hora da consulta o dado e retornado direitinho , mas na hora de inserir no banco.... =) esse erro.

segue a Rota

app.post('/produtos', function (require, response) {
        var produto = require.body;
        console.log(produto);
        var connection = app.infra.connectionFactory;
        var dao = new app.infra.ProdutoDAO(connection);
        console.log("Conecsão Pronta para inserir");
        dao.salva(produto, function (err, result) {
            console.log("livro salvo #EuAcho");
            response.redirect('/produtos');
        });
    });

o DAO

ProdutoDao.prototype.salva = function (produto, callback) {
    this._conection.query('insert into produtos (nome, preco, descricao) values (?, ?, ?)',
        [produto.titulo, produto.preco, produto.descricao], callback);
}

o Formulario

 <form action="/produtos" method="POST">
        <label for="titulo">Titulo livro</label>
        <input id="titulo" type="text" name="titulo" placeholder="Nomde do Livro"><br>
         <label for="preco">Preço</label>
        <input id="preco" type="text" name="preco" placeholder="preço do livro"><br>
        <label for="descricao">Descrição</label>
        <textarea id="descricao" cols="10" rows="10" name="descricao" placeholder="Descrição"></textarea>
       <input type="submit" value="Gravar"/>
    </form>

Já estou a Horas tentando resolver , mas até agora nada....

Se alguem souber a resposta =D eu ficaria muito Feliz

3 respostas

Bom, na teoria, tem algum lugar no seu código que você deve ta invocando um connection.end() ou algo parecido. O problema parece ser que esse connection.end está sendo invocado e logo depois você ta tentando salvar, só que a conexão já está fechada. Isso é a teoria... Tem como dar um procurada?

Obrigado por responder Alberto, realmente quando comento o connection.end() da função listar o erro some, mas agora tenho outro problema ... Como vou fazer então para fechar a conexão com o Banco ? fecho no fim da rota ? ou algo do genero ?

Quero dizer o escopo de cada função não era para intervir na outra ... que estranho. Outra coisa olhando a função

app.post('/produtos', function (require, response) {
        var produto = require.body;
        var connection = app.infra.connectionFactory;
        var dao = new app.infra.ProdutoDAO(connection);
        dao.salva(produto, function (err, result) {
            response.redirect('/produtos');
        });
        connection.end();
    });

eu acho um novo connection e fecho ele apos a função salva como ele já está fechado ?

No fim da rota é um bom teste.. um ta influenciando na outra por conta do loop de eventos do node.. ele agenda o fechamento de conexão para o loop e isso deve ta complicando.. tem também aí uma falha de design do driver...