How do you subscribe to an event?
1. Subscribing via .on(eventName, listener)
.on() registers a handler (listener) for a given event.
When the event fires via .emit(), every handler subscribed through .on() gets called.
Example:
const EventEmitter = require('events');
const emitter = new EventEmitter();
// Subscribe to the 'message' event
emitter.on('message', (data) => {
console.log('Message received:', data);
});
// Emit the event
emitter.emit('message', 'Hello, Node.js!');Output:
Message received: Hello, Node.js!2. Subscribing via .once(eventName, listener)
.once() is like .on(),
but the handler fires only once, then removes itself automatically.
Example:
emitter.once('connect', () => {
console.log('Connection established (once only)');
});
emitter.emit('connect'); // fires
emitter.emit('connect'); // won't fire again3. Several subscribers on the same event
Several handlers can subscribe to the same event, they fire in registration order:
emitter.on('update', () => console.log('First handler'));
emitter.on('update', () => console.log('Second handler'));
emitter.emit('update');Output:
First handler
Second handler4. Removing a subscription
To unsubscribe from an event, use .off() or .removeListener():
function handler() {
console.log('An event happened');
}
emitter.on('event', handler);
emitter.emit('event'); // fires
emitter.off('event', handler);
emitter.emit('event'); // doesn't fire5. Where subscribing to events is used in Node.js
Many built-in objects are EventEmitters, with the same .on() and .once() methods:
const fs = require('fs');
const stream = fs.createReadStream('file.txt');
// Subscribing to system events
stream.on('data', (chunk) => console.log('Got a chunk of data'));
stream.on('end', () => console.log('Reading finished'));
stream.on('error', (err) => console.error('Error:', err));The same works with:
http.Server(on('request', handler))net.Socket(on('connect', handler))process(on('exit', handler))
Summary
To subscribe to an event in Node.js, use the
.on(eventName, listener)method of anEventEmitterobject.
.on(), a permanent subscription.once(), a one-time subscription.off()/.removeListener(), unsubscribingThis mechanism is used everywhere: in streams, HTTP, the filesystem, processes, and custom events.
Short Answer
Interview readyA concise answer to help you respond confidently on this topic during an interview.