03-Conectando ao MySQL
Criando o projeto e conectando ao banco de dados
Materiais desta aula
03 — Conectando ao MySQL
Disciplina: Desenvolvimento Back-end II
Sumário
- Criando o projeto StockAPI
- Instalando o MySQL
- Do DER para SQL
- Conectando com mysql2
- Testando a conexão
- Erros comuns
1. Criando o projeto StockAPI
Mesmo processo usado para o DevLog em Back-end I, agora com um projeto novo:
mkdir stockapi && cd stockapi
npm init -y
npm install express dotenv cors mysql2
npm install --save-dev nodemon
mkdir config, controllers, middlewares, routes, services, database
| Dependência | Para que serve |
|---|---|
express | Framework para criar a API |
dotenv | Carrega variáveis de ambiente do .env |
cors | Permite que outras origens acessem a API |
mysql2 | Conexão com o banco MySQL |
nodemon (dev) | Reinicia o servidor automaticamente ao salvar o código |
Estrutura de pastas
stockapi/
config/
└ db.js
controllers/
middlewares/
routes/
services/
database/
└ schema.sql
.env
.gitignore
index.js
O .gitignore deve conter pelo menos:
node_modules/
.env
index.js — servidor mínimo
import express from 'express';
import cors from 'cors';
import 'dotenv/config';
const app = express();
app.use(cors());
app.use(express.json());
app.get('/', (req, res) => res.send('StockAPI no ar'));
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Rodando na porta ${PORT}`));
2. Instalando o MySQL
Dois componentes:
- MySQL Server — o programa que guarda os dados e responde às consultas SQL
- Cliente de gerenciamento — MySQL Workbench, DBeaver ou linha de comando, para visualizar tabelas e rodar comandos
3. Do DER para SQL
Criando o banco
CREATE DATABASE stockapi;
USE stockapi;
CREATE TABLE sem chave estrangeira
CREATE TABLE categorias (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(60) NOT NULL
);
AUTO_INCREMENT: o MySQL gera o próximoidautomaticamentePRIMARY KEY: marca a chave primária da tabela
CREATE TABLE com chave estrangeira
CREATE TABLE produtos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
preco DECIMAL(10,2) NOT NULL,
quantidade_estoque INT NOT NULL DEFAULT 0,
categoria_id INT,
FOREIGN KEY (categoria_id) REFERENCES categorias(id)
);
A ordem importa
Uma tabela referenciada por FOREIGN KEY precisa existir antes da tabela que a referencia:
categorias → clientes → usuarios → produtos → pedidos → itens_pedido
O arquivo database/schema.sql do projeto tem as 6 instruções CREATE TABLE nessa ordem.
4. Conectando com mysql2
O mysql2 já foi instalado no passo 1, junto com as outras dependências do projeto. Agora vamos usá-lo para criar a conexão.
Variáveis de ambiente
Senha de banco de dados nunca vai direto no código-fonte. Ela fica em variáveis de ambiente, no arquivo .env (que não vai para o Git):
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=sua_senha_aqui
DB_NAME=stockapi
config/db.js
Novo arquivo, dentro da pasta config/:
import mysql from 'mysql2/promise';
import 'dotenv/config';
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
export default pool;
Usamos um pool de conexões (createPool) em vez de uma conexão única — o pool gerencia várias conexões simultâneas, o que é importante assim que a API começar a receber várias requisições ao mesmo tempo.
5. Testando a conexão
Crie um arquivo separado, test-db.js, na raiz do projeto — não é preciso mexer no index.js para isso:
import pool from './config/db.js';
try {
const [rows] = await pool.query('SELECT NOW()');
console.log('Conectado! Hora do banco:', rows[0]);
} catch (erro) {
console.error('Falha na conexão:', erro.message);
}
Rode com node test-db.js. Depois de confirmar que a conexão funciona, esse arquivo pode ser apagado — ele não faz parte da API em si, é só uma checagem pontual.
6. Erros comuns
| Erro | Causa provável |
|---|---|
ECONNREFUSED | O MySQL não está rodando, ou host/porta errados |
ER_ACCESS_DENIED_ERROR | Usuário ou senha incorretos no .env |
ER_BAD_DB_ERROR | O banco de dados ainda não foi criado |
Para a próxima aula
04 — CRUD: Create e Read. Com a conexão funcionando, vamos escrever as primeiras rotas da StockAPI que criam e consultam produtos no banco de dados.