Pular para o conteúdo
Node.js

Erros 400 vs 500 em APIs Node.js: Seu teste pode estar mentindo

A diferença entre tratamento de erros explícitos e erros genéricos pode quebrar seus testes na hora e derrubar produção. capturar, tratar e devolver respostas corretas via Express, sem

Por que isso é importante

Resposta direta: em “Erros 400 vs 500 em APIs: Testes, Try/Catch e Tratamento”, meça no seu contexto — hype e ranking não substituem eval e aceite.

Por que isso é importante

Erros 400 vs 500 em APIs Node.js: Seu teste pode estar mentindo. A diferença entre tratamento de erros explícitos e erros genéricos pode quebrar seus testes na hora e derrubar produção. capturar, tratar e devolver respostas corretas via Express, sem perder a sanidade nem tempo.

Seu teste quebrou? Veja o erro: 500 vs 400

Seu código passou a lançar exceções diretamente? De repente, todos os testes que
esperavam 400 agora recebem 500. Isso explode os alarmes e cria pânico – resultado comum
quando mudamos o fluxo da API e não readequamos o tratamento de exceptions. O segredo é
envolver o processamento em um try/catch, e devolver o status que faz sentido para o
contexto. Não trate todo erro como erro de servidor.

Atenção

Se você só jogar exceptions para cima, seu Express devolve status 500 como padrão.
Diferencie validação do usuário (400) de falha interna (500) – e nunca deixe exception
desacompanhada.

Por que 500 não é sempre culpa do servidor?

Ao lançar uma exception inesperada que não é capturada, sua API sempre responderá com
status 500. Se o bug foi do usuário (input inválido, requisição malformada), não retorne
500 – use 400 explicitamente no catch.

Detalhe técnico

O padrão Express é 500 para qualquer erro não tratado. Porém, erros previsíveis (ex:
validação) devem ser capturados manualmente e retornar 400.

Use try/catch do jeito certo para APIs

Coloque o bloco try/catch ao redor do seu handler. No catch, verifique o tipo do erro
(ex: error.message) e responda com status 400 quando detectar falhas "do usuário".
Retorne a mensagem que seu front espera – geralmente, um JSON como {"message": error.message} .

Dica Extra

Capture o erro como unknown no catch para garantir type safety, e faça parsing/casting
só depois. Node com TypeScript adora esse padrão.

Teste esperando 400 pode falhar? Sim – e rápido!

Cada vez que um teste espera 400 e recebe 500, o problema está na camada de tratamento.
O código mudou para exception, mas o teste ainda espera um erro "delicado". Corrija com
try/catch, e retorne 400 na validação. E jamais exponha erro bruto para o cliente.

Atenção

Atualize seu teste quando mudar a maneira como erros são tratados. Muitos falsos
positivos/não cobrem suas exceções.

Responda no formato certo: JSON sempre

O front-end quase sempre espera um JSON como resposta, até mesmo para erros. Use {"message":...} – isso torna previsível para quem consome a API e permite melhores
mensagens ao usuário.

Evite erro "Type unknown" no TypeScript

O try/catch moderno recomenda pegar erros como unknown. Dentro do catch, faça o
cast/verificação para garantir o uso de error.message sem causar crash de tipagem. Isso
evita bugs chatos.

Dica Avançada

Para maior controle, crie classes customizadas de erro e diferencie pelo instanceof,
retornando status e mensagens adequadas.

Resumo Prático do Handler

Envolva a lógica principal com try/catch. No catch, quando a falha for previsível
(entrada ruim), retorne res.status(400).json( {"message": error.message} ). Se for
inesperado, logue o erro e mantenha o 500.

Exemplo Básico de Implementação

try { } catch (error: unknown) {
res.status(400).json({ message: (error as Error).message }); }

Erros comuns ao tratar erros

Lançar exceptions sem try/catch. Retornar 500 para qualquer falha. Expor stack trace em
produção. Esquecer de ajustar testes. Não padronizar mensagens de erro.

Como identificar rapidamente o tipo de erro

Analise a origem: veio do usuário (payload, requisição) ou do servidor (banco, infra)? O
primeiro leva 400, o segundo é 500.

Padronização: todo erro deve ter mensagem

Crie uma convenção: toda exception tratável deve carregar um message claro. Facilita
logging, debug e leitura dos testes.

Teste automatizado para diferentes tipos de erro

Simule no teste unidade: entrada inválida espera 400, erro de infra (banco off) espera
500. Forçar ambos ajuda a blindar seu handler.

Conclusão: nunca ignore o tratamento de exceção

Erros vão aparecer. O que diferencia um dev maduro é escrever handlers claros, testar
400/500, e devolver respostas robustas. Código seguro é código preparado.

Quer mergulhar mais fundo?

Confira vídeos práticos e discussões técnicas intensas do canal Dev Doido no Youtube. É
conteúdo direto ao ponto, repleto de exemplos reais e debugging em tempo real. Torne seu
Node.js à prova de produção!

Perguntas frequentes

Em Erros 400 vs 500 em APIs: Testes, Try/Catch e Tratamento, o que «Por que 500 não é sempre culpa do servidor?» pede para fazer esta semana?

Ao lançar uma exception inesperada que não é capturada, sua API sempre responderá com status 500. Se o bug foi do usuário (input inválido, requisição malformada), não retorne 500 – use 400 explicitamente no catch. Em «Por que 500 não é sempre culpa do servidor?», trate como experimento com dono e prazo — não como lista de intenções.

Como provar «Use try/catch do jeito certo para APIs» com um experimento mínimo?

Comece pelo mecanismo: Coloque o bloco try/catch ao redor do seu handler. No catch, verifique o tipo do erro (ex: error.message) e responda com status 400 quando detectar falhas "do usuário". Retorne a mensagem que seu front espera – geralmente, um JSON como {"message".

Quando «Teste esperando 400 pode falhar? Sim – e rápido!» deve esperar atrás de oferta/canal?

Critério do material: Cada vez que um teste espera 400 e recebe 500, o problema está na camada de tratamento. O código mudou para exception, mas o teste ainda espera um erro "delicado". Corrija com try/catch, e retorne 400 na validação. E jamais exponha erro bruto para o cliente. Se precisar de segundo sinal: Atualize seu teste quando mudar a maneira como erros são tratados. Muitos falsos positivos/não cobrem suas exceções.

Qual sinal mostra que «Responda no formato certo: JSON sempre» saiu do papel?

O artigo aponta: O front-end quase sempre espera um JSON como resposta, até mesmo para erros. Use {"message":...} – isso torna previsível para quem consome a API e permite melhores mensagens ao usuário. Ajuste ao contexto de `testes-falham-resolvendo-erros` antes de escalar.

Perguntas frequentes

Em Erros 400 vs 500 em APIs: Testes, Try/Catch e Tratamento, o que «Por que 500 não é sempre culpa do servidor?» pede para fazer esta semana?

Ao lançar uma exception inesperada que não é capturada, sua API sempre responderá com status 500. Se o bug foi do usuário (input inválido, requisição malformada), não retorne 500 – use 400 explicitamente no catch. Em «Por que 500 não é sempre culpa do servidor?», trate como experimento com dono e prazo — não como lista de intenções.

Como provar «Use try/catch do jeito certo para APIs» com um experimento mínimo?

Comece pelo mecanismo: Coloque o bloco try/catch ao redor do seu handler. No catch, verifique o tipo do erro (ex: error.message) e responda com status 400 quando detectar falhas "do usuário". Retorne a mensagem que seu front espera – geralmente, um JSON como {"message".

Quando «Teste esperando 400 pode falhar? Sim – e rápido!» deve esperar atrás de oferta/canal?

Critério do material: Cada vez que um teste espera 400 e recebe 500, o problema está na camada de tratamento. O código mudou para exception, mas o teste ainda espera um erro "delicado". Corrija com try/catch, e retorne 400 na validação. E jamais exponha erro bruto para o cliente. Se precisar de segundo sinal: Atualize seu teste quando mudar a maneira como erros são tratados. Muitos falsos positivos/não cobrem suas exceções.

Qual sinal mostra que «Responda no formato certo: JSON sempre» saiu do papel?

O artigo aponta: O front-end quase sempre espera um JSON como resposta, até mesmo para erros. Use {"message":...} – isso torna previsível para quem consome a API e permite melhores mensagens ao usuário. Ajuste ao contexto de `testes-falham-resolvendo-erros` antes de escalar.

Por que 500 não é sempre culpa do servidor?

Ao lançar uma exception inesperada que não é capturada, sua API sempre responderá com status 500. Se o bug foi do usuário (input inválido, requisição malformada), não retorne 500 – use 400 explicitamente no catch.

Como identificar rapidamente o tipo de erro

Analise a origem: veio do usuário (payload, requisição) ou do servidor (banco, infra)? O primeiro leva 400, o segundo é 500.

Quer mergulhar mais fundo?

Confira vídeos práticos e discussões técnicas intensas do canal Dev Doido no Youtube. É conteúdo direto ao ponto, repleto de exemplos reais e debugging em tempo real. Torne seu Node.js à prova de produção!