Beginner Fundamentals

Events and EventEmitter

Much of Node.js is built around events. The events module provides the EventEmitter class, which lets objects emit named events and run listeners when those events happen.

Creating an emitter

const EventEmitter = require("events");

const emitter = new EventEmitter();

// Listen for an event
emitter.on("greet", (name) => {
  console.log(`Hello, ${name}!`);
});

// Emit the event
emitter.emit("greet", "Fausto"); // Hello, Fausto!

on and emit

  • on(event, listener) registers a function to run when the event fires.
  • emit(event, ...args) fires the event and passes arguments to listeners.

Multiple listeners

You can attach several listeners to the same event, and all of them run:

const EventEmitter = require("events");
const emitter = new EventEmitter();

emitter.on("data", () => console.log("Listener 1"));
emitter.on("data", () => console.log("Listener 2"));

emitter.emit("data");
// Listener 1
// Listener 2

once

Use once to run a listener only the first time:

emitter.once("start", () => console.log("Runs only once"));

Summary

The EventEmitter is the core pattern behind streams, servers, and many Node.js APIs. Master on and emit and you understand how Node reacts to things happening.