← voltar para o feed
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.

# Continue lendo