Douglas Legramante

Douglas Legramante

Informática

Técnico em Informática · Back-End II

03-Conectando ao MySQL

Criando o projeto e conectando ao banco de dados

03 — Conectando ao MySQL

Disciplina: Desenvolvimento Back-end II


Sumário

  1. Criando o projeto StockAPI
  2. Instalando o MySQL
  3. Do DER para SQL
  4. Conectando com mysql2
  5. Testando a conexão
  6. 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ênciaPara que serve
expressFramework para criar a API
dotenvCarrega variáveis de ambiente do .env
corsPermite que outras origens acessem a API
mysql2Conexã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óximo id automaticamente
  • PRIMARY 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

ErroCausa provável
ECONNREFUSEDO MySQL não está rodando, ou host/porta errados
ER_ACCESS_DENIED_ERRORUsuário ou senha incorretos no .env
ER_BAD_DB_ERRORO 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.