Pool de Conexões - Node.js
O mysql2
Um pool de conexões é criado com a função createPool()
const mysql = require("mysql2");
const pool = mysql.createPool({
connectionLimit: 5,
host: "localhost",
user: "root",
password: "senha_do_servidor_mysql",
database: "usersdb"
});
O parâmetro connectionLimit
Para encerrar todas as conexões, usa-se o método end()
pool.end(function(err) {
if (err) {
return console.log(err.message);
}
});
Consultas ao Banco de Dados
Consultas ao banco de dados por meio de um pool de conexões são executadas com o método query()
connection
const mysql = require("mysql2");
const pool = mysql.createPool({
connectionLimit: 5,
host: "localhost",
user: "root",
database: "usersdb2",
password: "123456"
});
// adicionando um objeto
const sql = "INSERT INTO users (name, age) VALUES(?, ?)";
const data = ["Bill", 25];
pool.query(sql, data, function(err, results) {
if(err) console.log(err);
console.log(results);
});
// obtendo objetos
pool.query("SELECT * FROM users", function(err, results) {
if(err) console.log(err);
console.log(results);
});
const mysql = require("mysql2");
const pool = mysql.createPool({
connectionLimit: 5,
host: "localhost",
user: "root",
database: "usersdb2",
password: "123456"
});
// adicionando um objeto
const sql = "INSERT INTO users (name, age) VALUES(?, ?)";
const data = ["Bill", 25];
pool.query(sql, data, function(err, results) {
if(err) console.log(err);
console.log(results);
});
// obtendo objetos
pool.query("SELECT * FROM users", function(err, results) {
if(err) console.log(err);
console.log(results);
});
Note que, no caso acima, as consultas não são executadas de forma sequencial. Como ambas as chamadas ao método query
O mesmo cuidado deve ser tomado ao chamar o método end()
const mysql = require("mysql2");
const pool = mysql.createPool({
connectionLimit: 5,
host: "localhost",
user: "root",
database: "usersdb2",
password: "123456"
});
pool.query("SELECT * FROM users", function(err, results) {
if(err) console.log(err);
console.log(results);
});
pool.end(function(err) {
if (err) {
console.log(err.message);
}
console.log("pool encerrado");
});
Nesse caso, pode acontecer de o método pool.end()
pool.query()
Promise API
Assim como os objetos de conexão, os pools de conexões também suportam o uso de Promises:
const mysql = require("mysql2");
const pool = mysql.createPool({
connectionLimit: 5,
host: "localhost",
user: "root",
database: "usersdb2",
password: "123456"
}).promise();
pool.execute("SELECT * FROM users")
.then(result => {
console.log(result[0]);
})
.catch(function(err) {
console.log(err.message);
});
Com Promises, é possível contornar o problema descrito anteriormente com a chamada ao método end
const mysql = require("mysql2");
const pool = mysql.createPool({
connectionLimit: 5,
host: "localhost",
user: "root",
database: "usersdb2",
password: "123456"
}).promise();
pool.execute("UPDATE users SET age=age+1 WHERE name=?", ["Stan"]) // modificando objetos
.then(result => {
console.log(result[0]);
return pool.execute("SELECT * FROM users"); // obtendo objetos
})
.then(result => {
console.log(result[0]);
pool.end();
})
.then(() => {
console.log("pool encerrado");
})
.catch(function(err) {
console.log(err.message);
});
No exemplo acima, a chamada ao método end