Captura Global de Erros Desconhecidos em Node.js com Process Events

Captura Global de Erros Desconhecidos em Node.js com Process Events

Falhas inesperadas e Promises rejeitadas sem tratamento podem derrubar aplicações Node.js em produção sem deixar vestígios claros do problema. O uso dos manipuladores globais uncaughtException e unhandledRejection no objeto process permite interceptar esses erros críticos, registrar diagnósticos detalhados e realizar o desligamento gracioso (graceful shutdown) do sistema.

JavaScript

/**
 * Intercepta rejeições de Promises que não possuem bloco .catch()
 */
process.on('unhandledRejection', (motivo, promessa) => {
  console.error(' [ALERTA] Promise rejeitada sem tratamento:');
  console.error('Motivo:', motivo);
  // O ideal é registrar em um serviço de logs (ex: Winston, Sentry)
});

/**
 * Intercepta exceções síncronas que não foram capturadas por try/catch
 */
process.on('uncaughtException', (erro) => {
  console.error(' [CRÍTICO] Exceção síncrona não tratada:', erro.message);
  console.error(erro.stack);

  // Fecha conexões e encerra o processo com código de erro
  console.log('Encerrando aplicação de forma segura...');
  process.exit(1);
});

// --- Exemplo Prático de Uso ---

// 1. Simulação de Promise Rejeitada sem .catch()
setTimeout(() => {
  Promise.reject(new Error('Falha de conexão com a API externa'));
}, 500);

// 2. Simulação de Exceção Síncrona não capturada
setTimeout(() => {
  // Chamada de função inexistente dispara uncaughtException
  funcaoInexistente();
}, 1500);

Pontos-chave

  • Obrigatoriedade do process.exit(1) em uncaughtException: Após um erro síncrono não tratado, o estado da aplicação torna-se imprevisível e inseguro; encerrar o processo é fundamental para que gerenciadores de processos (PM2, Docker/Kubernetes) possam reiniciá-lo limpo.
  • Comportamento do unhandledRejection: Intercepta falhas assíncronas em Promises esquecidas sem .catch(), permitindo tratar o log antes que o Node.js encerre a aplicação abruptamente em versões modernas.
  • Ordem de Execução: Estes manipuladores agem como a última linha de defesa do sistema e não devem substituir o uso adequado de blocos try/catch e middlewares de erro em frameworks como Express ou Fastify.
  • Prática Recomendada em Produção: Utilize estes eventos para enviar alertas a ferramentas de monitoramento de erros (ex: Datadog, Sentry) e liberar recursos abertos, como pools de banco de dados e servidores HTTP, antes da finalização.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *