11) Node Event Emitter
Introduction
The Event Emitter module in Node.js is a core part of its event-driven architecture. It allows objects to emit events and other parts of your code to listen and react to those events.
Node.js is asynchronous and non-blocking,
so instead of waiting for tasks: It emits events when something happens Listeners handle those events.
π Think of it like: Button click β event emitted Event listener β handles it
Importing and Creating an Emitter
EventEmitter is part of Nodeβs events module
Used to emit and listen to events
Key methods:
on() β listen
emit() β trigger
once() β one-time listener
Used heavily in streams, HTTP, and async flows
Important: always handle error eventsconst EventEmitter = require('events');Create an instance
const emitter = new EventEmitter();Example
const EventEmitter = require('events'); const emitter = new EventEmitter(); // Listener emitter.on('greet', () => { console.log('Hello Rahul'); }); // Emit event emitter.emit('greet');Passing Arguments
emitter.on('greet', (name) => { console.log(`Hello ${name}`); }); emitter.emit('greet', 'Rahul');Multiple Listeners
emitter.on('event', () => console.log('Listener 1')); emitter.on('event', () => console.log('Listener 2')); emitter.emit('event');Important Methods
i)on(event, listener)- Register a listeneremitter.on('data', callback);ii)
emit(event, ...args)- Trigger eventemitter.emit('data', 'some data');iii)
once(event, listener)- Runs only onceemitter.once('login', () => { console.log('Logged in once'); });iv)
off() / removeListener()- Remove listeneremitter.off('event', callback);v)
removeAllListeners()emitter.removeAllListeners('event');Real world example
const EventEmitter = require('events'); const emitter = new EventEmitter(); emitter.on('orderPlaced', (orderId) => { console.log(`Order ${orderId} received`); }); emitter.on('orderPlaced', (orderId) => { console.log(`Processing order ${orderId}`); }); emitter.emit('orderPlaced', 101);Error Handling
If anerrorevent is emitted and not handled β app crashes βemitter.on('error', (err) => { console.error('Error occurred:', err.message); }); emitter.emit('error', new Error('Something went wrong'));Event Driven Architecture
Event-driven architecture in Node.js is the core design pattern that allows it to handle many operations efficiently without blocking execution. Instead of executing tasks sequentially, Node.js reacts to events (like requests, file reads, timers) and triggers callbacks/listeners when those events occur.
The system emits events, and listeners respond to those events.Event occurs β Event emitted β Listener executes β Action performedWhy Node.js uses Event-Driven Architecture
Node.js is: Single-threaded Non-blocking Built for high concurrency
π Instead of creating multiple threads (like Java),
Node: Registers tasks Delegates heavy work (I/O) to the system Executes callbacks when ready