Melhores Práticas de Eventos
Eventos no processo se mantêm manuteníveis com contratos explícitos, limpeza disciplinada e limites claros entre notificação e mensagens duráveis.
Busque em todas as páginas da documentação
Eventos no processo se mantêm manuteníveis com contratos explícitos, limpeza disciplinada e limites claros entre notificação e mensagens duráveis.
EventEmitter, @OnEvent ou on de socket.pedido.pago, não pagarPedido). Reflete fatos que já ocorreram.envelope v2 ou novo nome de evento). Documente a migração para os assinantes.off, once ou AbortSignal.setMaxListeners sem corrigir o registro duplicado. Avisos indicam vazamentos.afterEach. Evite acúmulo de listeners instáveis.removeAllListeners apenas para barramentos de propriedade do aplicativo. Não em internos compartilhados do Node imprudentemente.Promise.allSettled para fan-out. Uma falha não deve quebrar as outras silenciosamente.data em emitters personalizados.emit/on tipados. Veja Typed EventEmitter.listenerCount retorna ao baseline após trabalho com escopo. Teste de regressão de vazamento automatizado.Listeners em emitters globais nunca removidos - crescimento lento da memória ao longo dos dias.
Frequentemente sim - mas isole erros e prefira fila para efeitos colaterais pesados ou retriáveis.
Mais de um por evento no barramento global por escopo de requisição é suspeito - investigue a arquitetura.
Superfície de API diferente - a mesma disciplina de limpeza se aplica a on('data').
Mantenha os manipuladores leves; envie trabalho durável para BullMQ; provedores de escopo de módulo reduzem o uso indevido de singleton global.
Evite - surpresas de ordenação durante a inicialização; use a fase explícita de bootstrap() em vez disso.
Muitas classes emitem 'error' - manipule ou processe crashes para eventos de erro não tratados em alguns streams.
Comandos são imperativos (CreateOrder) - eventos são fatos (order.created). Não misture semânticas.
ADR ou tabela docs/events.md: nome, esquema do payload, produtores, consumidores, notas de idempotência.
Mesma limpeza ao desconectar - veja socket.io para regras específicas de transporte.
OK para contadores de domínio - evite emitir alta cardinalidade por requisição sem agregação.
Domain Events vs EventEmitter para decisões de fila vs barramento.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026