Node.js gestisce molte operazioni in modo asincrono, cioè senza bloccare l’esecuzione del programma. Uno degli strumenti principali per farlo è il modulo events, che ci permette di creare e gestire eventi personalizzati, proprio come accade quando clicchiamo un pulsante in una pagina web e parte un'azione.
Con gli eventi, possiamo organizzare il nostro codice facendo in modo che quando succede qualcosa, allora Node.js eseguirà un'istruzione specifica.
Impostare il modulo
Il modulo events è incluso in Node.js, quindi non c’è bisogno di installarlo tramite npm. Ora dobbiamo creare una variabile events che lo contenga:
const events = require("events");Da qui possiamo accedere alla classe EventEmitter, cioè "l'emettitore di eventi". Creiamo, quindi, un oggetto che conterrà i diversi eventi da poter utilizzare:
const emitter = new events.EventEmitter();Utilizziamo questa variabile per creare e gestire gli eventi nel server.
Per creare un evento, possiamo utilizzare il seguente codice:
const events = require("events");
const emitter = new events.EventEmitter();
emitter.on("saluto", () => {
console.log("Ciao! Questo è un evento.");
});
emitter.emit("saluto");Il codice è strutturato così:
emitter.on("nomeEvento", funzione) registra un evento: dice al programma "quando succede questo evento, esegui questa funzione". L'evento non parte da solo: bisogna ancora farlo partire.emitter.emit("nomeEvento") attiva l’evento, cioè dice al programma "è successo questo evento, esegui tutti i listener associati".Invece di emitter.on(), si può utilizzare emitter.once("nomeEvento", funzione) che registra un evento che può essere eseguito una sola volta. Dopo essere stato eseguito la prima volta con .emit(), viene automaticamente rimosso.
Nota: abbiamo parlato delle funzioni JavaScript in questa lezione.
L’evento error serve per gestire gli errori che possono accadere all’interno di un oggetto EventEmitter. Node.js considera gli errori degli eventi critici. Se non c’è nessun evento per registrarli, li segnala interrompendo l’esecuzione.
const events = require("events");
const emitter = new events.EventEmitter();
emitter.on("error", (err) => {
console.error("Errore catturato:", err.message);
});
emitter.emit("error", new Error("Qualcosa è andato storto!"));