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
├── 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