¿Recuerdas cómo funcionan los eventos en el navegador? Un botón no hace nada hasta que alguien hace clic. El navegador escucha ese clic y ejecuta una función cuando ocurre. Ese patrón — "cuando pase X, haz Y" — se llama programación orientada a eventos.
Node.js lleva este patrón al extremo. Casi todo en Node funciona con eventos: los streams que vimos en la lección anterior emiten eventos (data, end), los servidores HTTP emiten eventos cuando llegan peticiones, y tú puedes crear tus propios eventos con EventEmitter.
El flujo es siempre el mismo:
.on(evento, callback).emit(evento, datos)Cuando se emite un evento, todos los listeners registrados para ese evento se ejecutan en orden.
EventEmitter resuelve un problema de diseño: desacoplar quién produce algo de quién lo consume.
Imagina una tienda online. Cuando se crea un pedido, hay que:
Sin eventos, meterías toda esa lógica en una función gigante. Con eventos:
Cada pieza se ocupa de lo suyo. Si mañana necesitas añadir otra acción (como enviar una notificación push), solo añades otro listener. El código del pedido no cambia.
Hay una variante útil: .once registra un listener que se ejecuta una sola vez y se elimina automáticamente:
Es perfecto para eventos de inicialización o configuración que solo deben ocurrir una vez.
Puedes pasar varios argumentos al emitir un evento:
Muchos módulos de Node.js extienden EventEmitter. Cuando hacías stream.on("data", ...) en la lección de streams, estabas usando EventEmitter sin saberlo. Lo mismo ocurre con servidores HTTP, conexiones de base de datos y sockets.
Entender EventEmitter te da las llaves para entender cómo funcionan por dentro la mayoría de APIs de Node.js.
EventEmitter desde node:events.on() que muestre un mensaje en consola.emit() pasándole algún datonode index.js en la terminalLos eventos son el patrón más importante de Node.js. Cuando los dominas, el resto del ecosistema tiene sentido.