📢 Nuovo Corso Laravel API disponibile!

Il componente EventEmitter di Node.js

Se hai lavorato con JavaScript nel browser, sai quanto l’interazione dell’utente venga gestita attraverso gli eventi: clic del mouse, pressioni dei tasti della tastiera, reazione agli spostamenti del mouse, e così via.

Dal lato del server, Node.js ci offre la possibilità di costruire un sistema simile utilizzando il modulo events.

Questo modulo, in particolare, offre la classe EventEmitter, che useremo per gestire i nostri eventi.

La inizializzi usando:

const EventEmitter = require("node:events");
const eventEmitter = new EventEmitter();

Questo oggetto espone, tra gli altri, i metodi on ed emit.

  • emit è usato per innescare un evento
  • on è usato per aggiungere una funzione di callback che verrà eseguita quando l’evento viene innescato

Ad esempio, creiamo un evento start, e a titolo di esempio, reagiamo ad esso semplicemente registrando un messaggio sulla console:

eventEmitter.on("start", () => {
console.log("started");
});

Quando eseguiamo:

eventEmitter.emit("start");

la funzione del gestore degli eventi viene innescata, e otteniamo il log sulla console.

Puoi passare gli argomenti al gestore degli eventi passandoli come argomenti aggiuntivi a emit():

eventEmitter.on("start", (number) => {
console.log(`started ${number}`);
});
eventEmitter.emit("start", 23);

Con più argomenti:

eventEmitter.on("start", (start, end) => {
console.log(`started from ${start} to ${end}`);
});
eventEmitter.emit("start", 1, 100);

L’oggetto EventEmitter espone anche diversi altri metodi per interagire con gli eventi, come

  • once(): aggiunge un listener per una sola volta
  • removeListener() / off(): rimuove un listener per un evento
  • removeAllListeners(): rimuove tutti i listener per un evento