Mejores prácticas para eventos
Los eventos en proceso se mantienen manejables con contratos explícitos, limpieza disciplinada y límites claros entre la notificación y la mensajería duradera.
Busca en todas las páginas de la documentación
Los eventos en proceso se mantienen manejables con contratos explícitos, limpieza disciplinada y límites claros entre la notificación y la mensajería duradera.
EventEmitter, @OnEvent o manejadores on de socket.order.paid, no payOrder). Refleja hechos que ya ocurrieron.v2 o nuevo nombre de evento). Documenta la migración para los suscriptores.off, once o AbortSignal.setMaxListeners sin corregir el registro duplicado. Las advertencias indican fugas.afterEach. Evita la acumulación de listeners inestables.removeAllListeners solo para buses propiedad de la aplicación. No en internos de Node compartidos de forma imprudente.Promise.allSettled fan-out. Un fallo no debe romper otros silenciosamente.emit a menos que la arquitectura lo requiera. Prefiere encolar el trabajo desde un manejador delgado.data en emisores personalizados.emit/on tipados. Consulta Typed EventEmitter.listenerCount vuelve a la línea base después del trabajo con alcance. Prueba de regresión automatizada de fugas.Listeners en emisores globales nunca eliminados: crecimiento lento de la memoria durante días.
A menudo sí, pero aísla los errores y prefiere una cola para efectos secundarios pesados o reintentables.
Más de uno por evento en el bus global por alcance de solicitud es sospechoso; investiga la arquitectura.
Superficie de API diferente; la misma disciplina de limpieza se aplica a on('data').
Mantén los manejadores delgados; empuja el trabajo duradero a BullMQ; los proveedores con alcance de módulo reducen el uso indebido de singletons globales.
Evítalo: sorpresas de orden durante el arranque; fase bootstrap() explícita en su lugar.
Muchas clases emiten 'error'; manéjalos o el proceso se bloquea para eventos de error no manejados en algunos streams.
Los comandos son imperativos (CreateOrder); los eventos son hechos (order.created). No mezcles semánticas.
ADR o tabla docs/events.md: nombre, esquema de carga útil, productores, consumidores, notas de idempotencia.
La misma limpieza al desconectar; consulta socket.io para reglas específicas de transporte.
Está bien para contadores de dominio; evita la emisión de alta cardinalidad por solicitud sin agregación.
Eventos de dominio vs. EventEmitter para decisiones de cola vs. bus.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026