What is eventemitter in Node.js?
Node.js EventEmitter
EventEmitter is the foundation of Node.js's event-driven architecture. It's a built-in class (events module) that implements the observer pattern β allowing objects to emit named events and register listeners.
Basic Usage
const EventEmitter = require('events');
const emitter = new EventEmitter();
// Register a listener
emitter.on('greet', (name) => {
console.log(`Hello, ${name}!`);
});
// Emit the event
emitter.emit('greet', 'Node.js'); // β Hello, Node.js!Core Methods
| Method | Description |
|---|---|
emitter.on(event, listener) | Add a listener (alias: addListener) |
emitter.once(event, listener) | Add one-time listener |
emitter.off(event, listener) | Remove a listener (alias: removeListener) |
emitter.emit(event, ...args) | Emit an event |
emitter.removeAllListeners(event) | Remove all listeners |
emitter.listeners(event) | List all listeners |
emitter.listenerCount(event) | Count listeners |
once() β Fire Once
emitter.once('connect', () => {
console.log('Connected! This fires only once.');
});
emitter.emit('connect'); // fires
emitter.emit('connect'); // ignoredCustom EventEmitter Class
const EventEmitter = require('events');
class Database extends EventEmitter {
connect() {
// simulate async connection
setTimeout(() => {
this.emit('connected', { host: 'localhost' });
}, 1000);
}
query(sql) {
// simulate query
setTimeout(() => {
this.emit('data', [{ id: 1, name: 'Alice' }]);
}, 500);
}
}
const db = new Database();
db.on('connected', ({ host }) => {
console.log(`Connected to ${host}`);
db.query('SELECT * FROM users');
});
db.on('data', rows => {
console.log('Got rows:', rows);
});
db.connect();Error Events
'error' is a special event β if emitted with no listener, Node.js throws an uncaught exception:
// Always listen for 'error'!
emitter.on('error', (err) => {
console.error('Caught error:', err.message);
});
emitter.emit('error', new Error('Something went wrong'));Max Listeners Warning
Node.js warns when you add more than 10 listeners to a single event (memory leak protection):
emitter.setMaxListeners(20); // increase limit
// or
emitter.setMaxListeners(0); // unlimitedEventEmitter in Node.js Core
Many built-in Node.js objects extend EventEmitter:
http.Serverβ'request','close','error'net.Socketβ'data','end','error'fs.ReadStreamβ'data','end','error'processβ'exit','uncaughtException','SIGTERM'
Summary
EventEmitter enables loose coupling and event-driven architecture in Node.js. It's the backbone of streams, HTTP servers, and most core Node.js modules. Use it to build custom event-driven systems in your applications.
Short Answer
Interview readyA concise answer to help you respond confidently on this topic during an interview.