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/await para 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.