EventEmitter

Last updated Apr 23, 2026 Note

For compatibility dates of 2026-08-04 or later, Workers enables both nodejs_compat and nodejs_compat_v2 by default. These flags are not used for these compatibility dates. Existing projects do not need to remove them when updating their compatibility date. For earlier dates, add nodejs_compat to your Wrangler configuration file to opt in. For instructions to turn off Node.js compatibility, refer to the Node.js compatibility flag.

An EventEmitter ↗︎ is an object that emits named events that cause listeners to be called.

import { EventEmitter } from "node:events";

const emitter = new EventEmitter();
emitter.on("hello", (...args) => {
    console.log(...args); // 1 2 3
});

emitter.emit("hello", 1, 2, 3);

The implementation in the Workers runtime supports the entire Node.js EventEmitter API. This includes the captureRejections ↗︎ option that allows improved handling of async functions as event handlers:

const emitter = new EventEmitter({ captureRejections: true });
emitter.on("hello", async (...args) => {
    throw new Error("boom");
});
emitter.on("error", (err) => {
    // the async promise rejection is emitted here!
});

Like Node.js, when an 'error' event is emitted on an EventEmitter and there is no listener for it, the error will be immediately thrown. However, in Node.js it is possible to add a handler on the process object for the 'uncaughtException' event to catch globally uncaught exceptions. The 'uncaughtException' event, however, is currently not implemented in the Workers runtime. It is strongly recommended to always add an 'error' listener to any EventEmitter instance.

Refer to the Node.js documentation for EventEmitter ↗︎ for more information.

Was this helpful?

YesNo

On this page

EventEmitter - 图1Docs

{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/workers/runtime-apis/nodejs/eventemitter/#page","headline":"EventEmitter","description":"Use the Node.js EventEmitter API in Cloudflare Workers to emit and listen for named events.","url":"https://developers.cloudflare.com/workers/runtime-apis/nodejs/eventemitter/","inLanguage":"en","image":"https://developers.cloudflare.com/workers/runtime-apis/nodejs/eventemitter/og.png?v=ae21a2df38f5800d","dateModified":"2026-04-23","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}


description: Use the Node.js fs module in Cloudflare Workers to access a virtual file system for reading and writing files. title: fs image: https://developers.cloudflare.com/workers/runtime-apis/nodejs/fs/og.png?v=ed7800f085436799


Skip to content

Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/workers/llms.txt
Use this file to discover all available pages before exploring further.