EventEmitter

EventEmitter lets objects emit named events that listeners react to.

Syntaxemitter.on('event', listener); emitter.emit('event', data);

Much of Node is built on events. The events module provides the EventEmitter class, which lets an object emit named events and lets other code listen for them.

Core methods

  • on(name, listener) — register a listener.
  • emit(name, ...args) — fire an event.
  • once(name, listener) — listen only for the first occurrence.

This is the observer pattern: emitters and listeners stay decoupled.

Example

Example · javascript
const EventEmitter = require('events');
const bus = new EventEmitter();

bus.on('order', (item) => {
  console.log('New order:', item);
});

bus.emit('order', 'Pizza');
bus.emit('order', 'Salad');

When to use it

  • An HTTP server emits a `'request'` event for every incoming connection, and listeners attached with `.on()` handle routing without tight coupling.
  • A file-watcher module emits `'change'`, `'add'`, and `'unlink'` events so multiple parts of a build tool can react independently.
  • A game engine uses a custom EventEmitter to broadcast `'player:join'` and `'player:leave'` events that the scoreboard and chat systems listen for separately.

More examples

Basic EventEmitter usage

Creates a basic emitter, attaches a listener with `.on()`, and fires the event with `.emit()`.

Example · js
const { EventEmitter } = require('events');

const emitter = new EventEmitter();

emitter.on('greet', (name) => {
  console.log(`Hello, ${name}!`);
});

emitter.emit('greet', 'Alice'); // Hello, Alice!

Once listener and remove

Uses `.once()` to register a one-time listener that is automatically removed after the first emit.

Example · js
const { EventEmitter } = require('events');
const ee = new EventEmitter();

ee.once('connected', () => console.log('Connected!')); // fires once
ee.emit('connected'); // prints
ee.emit('connected'); // silent -- listener removed

Extend EventEmitter in a class

Extends `EventEmitter` in a class to give custom objects the ability to emit and receive typed events.

Example · js
const { EventEmitter } = require('events');

class Database extends EventEmitter {
  connect(url) {
    // simulate async connection
    setTimeout(() => this.emit('ready', url), 100);
  }
}

const db = new Database();
db.on('ready', url => console.log('DB connected to', url));
db.connect('mongodb://localhost/mydb');

Discussion

  • Be the first to comment on this lesson.