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 ofon
.emitter.once(event, listener)
— one-time listener.emitter.off(event, listener)
— remove listener.emitter.removeListener(event, listener)
— alias ofoff
.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.