events

The events module provides the EventEmitter class for implementing the publish/subscribe pattern. Many core APIs (like streams, sockets) use it.


API Surface

Core Methods (EventEmitter)

  • emitter.on(event, listener) — register listener.
  • emitter.addListener(event, listener) — alias of on.
  • emitter.once(event, listener) — one-time listener.
  • emitter.off(event, listener) — remove listener.
  • emitter.removeListener(event, listener) — alias of off.
  • emitter.removeAllListeners([event]) — clear listeners.
  • emitter.emit(event, [...args]) — trigger event.

Utilities

  • emitter.listenerCount(event) — number of listeners for an event.
  • emitter.listeners(event) — array of listeners.
  • emitter.eventNames() — registered event names.

Special

  • 'error' event: if emitted with no handler, process throws.

Examples (English only)

const EventEmitter = require("events");

const emitter = new EventEmitter();

// Listener
emitter.on("greet", (name) => {
  console.log("Hello", name);
});

// Once-only
emitter.once("bye", () => console.log("Goodbye"));

// Emit events
emitter.emit("greet", "Bnlang");
emitter.emit("bye");
emitter.emit("bye"); // ignored

// Error event
emitter.on("error", (err) => console.error("Error:", err.message));
emitter.emit("error", new Error("Something went wrong"));

Notes

  • Always handle error events to prevent process crash.
  • Use once for lifecycle or cleanup events.
  • Avoid unbounded listeners — remove when not needed.
  • EventEmitter underlies many core APIs; understanding it helps with streams, sockets, and more.