The core node:events module provides the EventEmitter class, which forms the cornerstone of Node.js event-driven architecture. It allows objects to emit named event signals that invoke registered callback listeners asynchronously.
flowchart LR
A["Publisher Object"] -->|"emitter.emit('order:placed', payload)"| B["EventEmitter Hub"]
B --> C["Listener 1: Send Confirmation Email"]
B --> D["Listener 2: Update Inventory DB"]
B --> E["Listener 3: Dispatch Analytics Metric"]
import { EventEmitter } from 'node:events';
// Create custom Service extending EventEmitter
class OrderService extends EventEmitter {
createOrder(orderId, amount, customerEmail) {
console.log(`Processing Order #${orderId} ($${amount})...`);
// Business logic execution
const orderData = { orderId, amount, customerEmail, timestamp: new Date() };
// Emit named custom event asynchronously
this.emit('order:success', orderData);
}
}
// Instantiate Service and Register Event Listeners
const orderService = new OrderService();
// Listener 1: Email Notification
orderService.on('order:success', (order) => {
console.log(`[Email Service] Sending order receipt to ${order.customerEmail}...`);
});
// Listener 2: Metrics Collector (Runs once only)
orderService.once('order:success', (order) => {
console.log(`[Metrics] Registered first successful order metric for #${order.orderId}`);
});
// Listener 3: Error handling listener
orderService.on('error', (err) => {
console.error('[Error Listener] Caught Order Service Exception:', err.message);
});
// Trigger order creation
orderService.createOrder(1042, 299.99, '[email protected]');
'error' Event Listener: If an EventEmitter emits an 'error' event and has no listeners registered, Node.js will throw an unhandled exception and terminate the process.emitter.off(event, listener) or emitter.removeListener() when components unmount or destroy.emitter.setMaxListeners(n) if required by design.Create a custom UserRegistration emitter that emits a 'user:registered' event when a new user joins, and attach two distinct callbacks to handle it.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With