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();
}
}