Exemplo didático para um treinamento introdutório de back-end.
Fluxo principal:
HTTP Request
↓
Router
↓
Middleware (quando necessário)
↓
Controller
↓
Model
↓
Knex
↓
PostgreSQL
- routes/: associa verbo HTTP e URL a uma operação.
- controllers/: recebe a requisição, valida dados básicos e coordena a resposta.
- models/: concentra o acesso aos dados.
- middleware/: executa lógica antes do controller, como autenticação.
- database/: configura a conexão com PostgreSQL usando Knex.
- Node.js instalado
- PostgreSQL instalado e em execução
npm installNo PostgreSQL:
CREATE DATABASE treinamento_node;Depois execute o arquivo:
database/schema.sql
Por exemplo, com psql:
psql -U postgres -d treinamento_node -f database/schema.sqlCopie:
.env.example
para:
.env
Ajuste usuário, senha e nome do banco.
Exemplo:
PORT=3000
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=treinamento_node
JWT_SECRET=uma-chave-secreta-bem-grandenpm run seed:userCredenciais:
email: professor@teste.com
senha: 123456
A senha armazenada no banco é um hash BCrypt.
Durante o desenvolvimento:
npm run devOu:
npm startServidor:
http://localhost:3000
Body:
{
"email": "professor@teste.com",
"senha": "123456"
}Resposta:
{
"usuario": {
"id": 1,
"nome": "Professor",
"email": "professor@teste.com"
},
"token": "..."
}Header:
Authorization: Bearer SEU_TOKEN
Esse endpoint demonstra a validação do JWT.
Lista todos os produtos. Rota pública.
Busca um produto pelo ID. Rota pública.
Rota protegida por JWT.
Body:
{
"descricao": "Mouse sem fio",
"preco": 89.90,
"categoria": "Periféricos",
"estoque": 20
}Rota protegida por JWT.
Exemplo:
{
"preco": 99.90,
"estoque": 15
}Rota protegida por JWT.
O arquivo requests.http contém chamadas prontas para extensões como REST Client do VS Code.
Também é possível usar Postman, Insomnia ou Bruno.
- Execute
POST /auth/login. - Copie o token retornado.
- Envie o token nas operações protegidas:
Authorization: Bearer SEU_TOKEN
- Faça POST, PUT ou DELETE em
/produtos.
O projeto evita propositalmente camadas adicionais como services, repositories, DTOs e schemas para deixar claro o fluxo básico:
Router → Controller → Model → Banco
Depois que essa separação estiver compreendida, o projeto pode evoluir para uma arquitetura mais robusta.