Node.js ยท Chapter 11 of 43
Events & EventEmitter
Node.js is built around an event-driven architecture. Many built-in objects, like HTTP servers and streams, emit named events that you can listen for.
The `events` module provides the `EventEmitter` class, which you can also use to build your own event-based objects.
Emitting and listening
Use `.on()` to register a listener for an event and `.emit()` to trigger it, optionally passing data.
Custom emitters
You can extend EventEmitter to create objects that broadcast their own custom events, a common pattern for decoupled code.
Example 1 (javascript)
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('greet', name => console.log('Hello, ' + name));
emitter.emit('greet', 'Ada');Output
Hello, AdaThe listener registered with .on() runs when .emit() fires the event.
Example 2 (javascript)
class Logger extends require('events') {
log(msg) { this.emit('logged', msg); }
}
const logger = new Logger();
logger.on('logged', msg => console.log('LOG:', msg));
logger.log('Server started');Output
LOG: Server startedA custom class extends EventEmitter to broadcast its own events.
Key points
- Node.js relies heavily on an event-driven model.
- EventEmitter provides .on() and .emit() methods.
- Many core modules (http, streams) are EventEmitters.
- You can extend EventEmitter for custom event-based objects.
๐ก Note: Always remember to attach an 'error' listener on EventEmitters, or unhandled errors will crash your app.
