CodeAventura
Node.js
▸Tu primera API▸Eventos: el corazón de Node.js

Misión

// Importa EventEmitter desde node:events
// Crea una instancia, registra un listener y emite un evento
// Ejecuta: node index.js

TerminalTema: Vintage
13 / 15Eventos: el corazón de Node.js
Anterior

Eventos: el corazón de Node.js

Un patrón que ya conoces

¿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.

EventEmitter: tu propio sistema de eventos

El flujo es siempre el mismo:

  1. Registras un listener con .on(evento, callback)
  2. Disparas el evento con .emit(evento, datos)

Cuando se emite un evento, todos los listeners registrados para ese evento se ejecutan en orden.

¿Para qué sirve esto?

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:

  • Enviar un email de confirmación
  • Actualizar el inventario
  • Notificar al almacén
  • Registrar la venta en estadísticas

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.

.on vs .once

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.

Eventos con múltiples datos

Puedes pasar varios argumentos al emitir un evento:

¿Dónde verás EventEmitter en la vida real?

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.

Tu desafío 🚀

  1. Importa EventEmitter desde node:events
  2. Crea una instancia de EventEmitter
  3. Registra un listener con .on() que muestre un mensaje en consola
  4. Emite el evento con .emit() pasándole algún dato
  5. Ejecuta node index.js en la terminal

Los eventos son el patrón más importante de Node.js. Cuando los dominas, el resto del ecosistema tiene sentido.