Responsabilidade na Arquitetura
Atuar como porta de entrada HTTP. Lê parâmetros da requisição (query, params, body), chama os métodos adequados do UsuarioService e responde com status codes REST padronizados (200, 201, 204, 404). Delega exceções para o middleware central via next(erro).
Como Funciona o Código
Todos os métodos são assíncronos e estáticos. Eles recebem req, res e next do Express. Os blocos try/catch interceptam rejeições de Promises e as encaminham para o pipeline de tratamento de erros com next(erro).
Por Que Essa Abordagem?
Separar o Controller do Service garante que o código HTTP (status codes, headers, cookies) fique desacoplado das regras de negócio e de persistência. Isso permite testar os serviços isoladamente e trocar o framework web sem reescrever a lógica da aplicação.
Funções e Métodos Exportados (2)
UsuarioController.listar(req, res, next)Lista usuários paginados a partir de query params (pagina, limite, busca).
- req.query.pagina (
number): Número da página atual (padrão 1) - req.query.limite (
number): Itens por página (padrão 10)
JSON com lista de usuários e metadados de paginaçãoUsuarioController.criar(req, res, next)Recebe o payload validado no body e invoca o service para criar o usuário.
Status 201 com o usuário recém-criadoBoas Práticas
- Sempre repasse erros inesperados com next(erro) para evitar requisições presas sem resposta.
- Nunca coloque lógica de hash de senhas ou consultas SQL diretas dentro do Controller.
- Use status code 201 para criações bem-sucedidas e 204 para exclusões sem conteúdo.
Erros Comuns a Evitar
- Esquecer de converter req.params.id para número antes de passar ao banco.
- Tentar enviar duas respostas na mesma requisição esquecendo o return antes de res.status().
