Lesson 12 +10 XP

Event Emitter & Event-Driven Architecture

The EventEmitter Pattern

Many core Node.js objects (HTTP server, Streams, Sockets) inherit from the EventEmitter class in the node:events module.

Creating an EventEmitter

const EventEmitter = require("node:events");

class UserOrderEmitter extends EventEmitter {}

const orderSystem = new UserOrderEmitter();

// Register event listener
orderSystem.on("orderPlaced", (orderId, amount) => {
  console.log(`[EMAIL] Receipt sent for Order #${orderId} ($ ${amount})`);
});

// Register one-time listener
orderSystem.once("systemStart", () => {
  console.log("System initialized!");
});

// Emit events
orderSystem.emit("systemStart");
orderSystem.emit("orderPlaced", 1001, 149.99);
orderSystem.emit("orderPlaced", 1002, 89.50);

TL;DR

  • Use emitter.on('event', callback) to subscribe to events.
  • Use emitter.once('event', callback) for single-fire handlers.
  • Emit events synchronously via emitter.emit('event', ...args).