Skip to main content
Practice Problems

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

js
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

MethodDescription
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

js
emitter.once('connect', () => { console.log('Connected! This fires only once.'); }); emitter.emit('connect'); // fires emitter.emit('connect'); // ignored

Custom EventEmitter Class

js
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:

js
// 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):

js
emitter.setMaxListeners(20); // increase limit // or emitter.setMaxListeners(0); // unlimited

EventEmitter 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 ready
Premium

A concise answer to help you respond confidently on this topic during an interview.

Finished reading?
Practice Problems