Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Node.js and MySql - Error: Cannot enqueue Handshake after invoking quit.

Olá Pessoal,

Recentemente iniciei um projeto com Node.js e por ser ainda um pouco iniciante me deparei com o seguinte problema:

Error: Cannot enqueue Handshake after invoking quit.

Pelo que andei pesquisando no Google identifiquei que isso ocorre porque por causa da criação de pool de conexão sequencial, o sistema não está fechando um para abrir o próximo. Atualmente, estou realizando chamadas de banco utilizando callback. Além dessa maneira, vi que existe uma outra forma que é por meio de Promise. Mas acredito que isso seria apenas maneiras diferentes de se realizar o mesmo processo. Existem os seus pós e contras? Acredito que sim. Mas isso seria uma outra conversa, ou estou enganado!

Bom, abaixo está o código que utilizo:

Controller:

criar() {
  let _model = this.http.req.body;
  if (!_model.id) {
    this.model.obterPorId(_model.id, (err, model) => {
      this.model.criar(_model, (err) => {
        this.redirecionar(model.clienteId);
      });
    });
  }
}

DAO:

obterPorId(id, done) {
  const _sql = `SELECT * FROM Funcionario f WHERE f.Id = ${id}`;
  return this._query.obterUm(_sql, done);
}

criar(model, done) {
  const _sql = `INSERT INTO Funcionario (nome, clienteId, dataCriacao) VALUES ('${model.nome}', ${model.clienteId}, ${this._query.getDataAtual()});`;
  this._query.criar(_sql, done);
}

Query:

executar(sql, done) {
  this._datasource.abrir();
  this._datasource.executar(sql, (err, result) => {
    done(err, result);
  });
  this._datasource.fechar();
}

Datasource:

class Datasource {
  constructor() {
    this._config = app.data.Config;
    this._connection = null;
    this.instanciar();
  }
  instanciar() {
    this._connection = mysql.createConnection(this._config);
  }
  abrir() {
    this._connection.connect();
  }
  executar(sql, done) {
    this._connection.query(sql, (err, result) => {
    if (err) throw err;
      done(null, result);
    });
  }
  fechar() {
    this._connection.end();
  }
}
1 resposta
solução!

Oi Diogo, tudo bem? Notei que você duplicou o tópico aqui no fórum. Gostaria de pedir para que não fizesse isso, qualquer alteração deve ser feita no mesmo tópico feito antes, tá bem?

Vou deixar o link do outro tópico aqui para os outros alunos acompanhem e ajudem na resposta. Estou fechando este tópico!

https://cursos.alura.com.br/forum/topico-node-js-and-mysql-error-cannot-enqueue-handshake-after-invoking-quit-42988

Abraço!