Node.js8 min de leitura
Como estruturar um backend escalável com Express
Express não é obsoleto. É minimalista. Veja a estrutura de pastas e padrões que uso em APIs que rodam há anos sem dor.
#node.js#express#arquitetura
Toda semana aparece um framework Node novo. Fastify, Hono, Elysia. E o Express continua lá, segurando bilhões de requests em produção.
A estrutura que uso
src/
modules/
products/
product.controller.ts
product.service.ts
product.repository.ts
product.routes.ts
product.schema.ts
shared/
middlewares/
errors/
utils/
app.ts
server.ts
Três camadas, nenhuma surpresa:
- Controller: valida entrada e devolve resposta. Não sabe de banco.
- Service: regra de negócio pura. Não sabe de HTTP.
- Repository: fala com o banco. Não sabe de HTTP nem de regra.
Validação como porteiro
Nada entra no service sem passar por Zod:
const createProductSchema = z.object({
sku: z.string().min(1),
name: z.string().min(3),
price: z.number().positive(),
});
router.post("/products", validate(createProductSchema), productController.create);
Erros como tipos
Um AppError com status e código. Middleware global captura e serializa. Nada de try/catch em controller.
Código escalável é código aborrecidamente previsível.
Gostou do post?
Compartilha com alguém que tá resolvendo o mesmo problema.