AULA 50 MÓDULO 6 backend Node.js ⏱ 90 min

API CRUD Completa

Síntese do Módulo 6: Express + PostgreSQL + JWT + Zod + helmet + cors. Estrutura modular por domínio.

ExpressPostgreSQLJWTZodhelmetCRUDmodulararquitetura

API CRUD com banco real

Síntese do Módulo 6: uma API REST completa com Express + PostgreSQL + autenticação JWT + validação + tratamento de erros — a estrutura que você vai usar em projetos reais.

ESTRUTURA DO PROJETO
api/
├── src/
│ ├── config/ env.js, db.js
│ ├── middlewares/ auth.js, errorHandler.js, validate.js
│ ├── modules/
│ │ └── users/ controller, service, repository, routes
│ └── app.js Express configurado
├── server.js listen
└── .env.example
🏗️
estrutura modular
Organizar por módulos de domínio (users/, orders/, products/) escala melhor que organizar por tipo de arquivo (controllers/, services/). Cada módulo tem tudo que precisa.

Stack da API

Cada pacote tem um papel específico:

express
Framework HTTP
pg
Driver PostgreSQL
jsonwebtoken
JWT — gerar e verificar tokens
bcryptjs
Hash de senhas
zod
Validação de schema
helmet
Headers de segurança
cors
Cross-origin resource sharing
dotenv
Variáveis de ambiente
javascript
// app.js — API configurada completa
const express    = require('express')
const helmet     = require('helmet')
const cors       = require('cors')
const usersRouter = require('./modules/users/routes')
const errorHandler= require('./middlewares/errorHandler')
const config      = require('./config/env')

const app = express()

// Middlewares globais
app.use(helmet())
app.use(cors({ origin: config.allowedOrigins }))
app.use(express.json())

// Rotas
app.use('/api/v1/users', usersRouter)

// 404 — rota não encontrada
app.use((req, res) => {
  res.status(404).json({ error: 'Endpoint não encontrado' })
})

// Error handler — sempre por último
app.use(errorHandler)

module.exports = app
quiz · aula 50
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Por que organizar por módulos de domínio (users/, orders/) em vez de por tipo (controllers/, services/)?
QUESTÃO 02
O que o middleware 404 no final da pilha faz?
QUESTÃO 03
Por que errorHandler deve ser o último middleware registrado?
0/3