Integração de Express com MySql
A partir de uma aplicação em Express podemos aceder a uma base de dados mysql usando o módulo mysql2.
O módulo mysql2
O módulo mysql2 é uma biblioteca de cliente MySQL para Node.js, voltada principalmente para alta performance, robustez e compatibilidade com recursos modernos do banco de dados. Sua integração com Express é bastante popular para a criação de APIs e sistemas backend escaláveis, pois oferece suporte a promises, prepared statements, conexões seguras via SSL e diversas otimizações em relação ao módulo mysql tradicional.
Características do mysql2
- Performance aumentada: Otimizado para operações rápidas e eficientes no Node.js, especialmente útil para aplicações web de médio e grande porte.
- Suporte a promises: Permite uso direto de async/await, tornando o controle de fluxo assíncrono mais claro e o tratamento de erros, mais eficiente.
- Prepared statements: Ajuda a evitar injeção de SQL e melhora a segurança, facilitando a separação dos dados e dos comandos SQL.
- Gerenciamento de conexões (Pool): O pool de conexões automático evita sobrecarga e facilita o reaproveitamento de conexões abertas, o que otimiza o uso de recursos, principalmente em ambientes concorrentes.
Estrutura de Uso com Express
Ao usar mysql2 com Express, o padrão típico envolve:
- Criar um pool de conexões assim que o projeto inicia, usando
mysql2/promise. - Separar a configuração da conexão (geralmente em um arquivo dedicado, como db.js).
- Usar as funções async do pool em rotas Express para consultar e manipular dados no banco MySQL.luiztools+1
Por exemplo:
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: 'escoladb'
});
module.exports = pool;
No ficheiro principal Express, funções como pool.execute('SELECT * FROM clientes') são usadas dentro de rotas (GET, POST, PUT, DELETE), utilizando async/await para respostas confiáveis e tratamento eficiente de erros.
Quando usar mysql2 com Express
- Para criar APIs RESTful que interagem diretamente com bases de dados MySQL.
- Em projetos que exigem alta rapidez de resposta e manipulação eficiente de dados.
- Onde o uso de promises, prepared statements e pools de conexão são essenciais para garantir escalabilidade e segurança.
Instalação do módulo mysql2
Para instalar o módulo mysql2, execute na linha de comandos a seguinte instrução:
npm i mysql2 --save
Operações CRUD
Instalação
Execute no terminal para instalar as dependências:
npm install express mysql2
Certifique-se de ter o MySQL rodando e um banco de dados criado.
Configurar a conexão
Crie um ficheiro chamado db.js com a seguinte configuração:
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: 'escoladb'
});
module.exports = pool;
Usar o modo promise é recomendado para trabalhar com async/await no Node.js.
Express + CRUD Exemplo
No ficheiro principal (ex: server.js):
const express = require('express');
const pool = require('./db');
const app = express();
app.use(express.json());
// CREATE
app.post('/alunos', async (req, res) => {
const { nome, email } = req.body;
const [result] = await pool.execute('INSERT INTO alunos (nome, email) VALUES (?, ?)', [nome, email]);
res.status(201).json({ id: result.insertId, nome, email });
});
// READ
app.get('/alunos', async (req, res) => {
const [rows] = await pool.execute('SELECT * FROM alunos');
res.json(rows);
});
// UPDATE
app.put('/alunos/:id', async (req, res) => {
const { nome, email } = req.body;
const { id } = req.params;
await pool.execute('UPDATE alunos SET nome = ?, email = ? WHERE id = ?', [nome, email, id]);
res.json({ id, nome, email });
});
// DELETE
app.delete('/alunos/:id', async (req, res) => {
const { id } = req.params;
await pool.execute('DELETE FROM alunos WHERE id = ?', [id]);
res.status(204).send();
});
app.listen(3000, () => console.log('API a correr na porta 3000'));
Observações
- O uso de pools de conexão melhora a performance e previne problemas de conexões abertas indevidamente.
- Use
async/awaitpara facilitar tratamento de respostas e erros. - Os arrays retornados são padrão no mysql2: o primeiro item são linhas (dados), o segundo metadados.
