Skip to content
UniCircle
MediumConceptualBuilt-in modules

EventEmitter and event arguments

Question NODE-EVT-001

What does the events module provide? Show how to emit an event with arguments and listen to it. What happens if an error event has no listener?

Show the explanation

Model answer. The events module provides `EventEmitter`, the observer pattern built into Node. Many core objects (streams, HTTP servers, sockets) are emitters.

JavaScript
import { EventEmitter } from 'node:events';

class OrderService extends EventEmitter {
  place(order) {
    // ...save the order...
    this.emit('placed', order.id, order.total);   // extra arguments go to listeners
  }
}

const orders = new OrderService();
orders.on('placed', (id, total) => console.log(`order ${id}: ₹${total}`));
orders.once('placed', () => console.log('first order of the day!'));
orders.place({ id: 17, total: 499 });
  • on adds a listener, once listens a single time, off removes one.
  • Listeners run synchronously, in the order they were added, during emit.
  • Event arguments are whatever values you pass to emit after the event name.
  • An 'error' event with no listener throws, and can crash the process, so always listen for 'error' on emitters you create or use.
  • Adding more than 10 listeners to one event prints a memory-leak warning, which usually means listeners are added repeatedly without being removed.

Original UniCircle question. Last reviewed 22 Oct 2026.