Skip to content

L'emitter di eventi di Node.js

Se hai lavorato con JavaScript nel browser, sai quanto dell'interazione dell'utente viene gestita tramite eventi: clic del mouse, pressioni dei tasti della tastiera, reazione ai movimenti del mouse e così via.

Sul lato backend, Node.js ci offre la possibilità di costruire un sistema simile usando il modulo events.

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

Lo si inizializza usando

js
import EventEmitter from 'node:events'
const eventEmitter = new EventEmitter()

Questo oggetto espone, tra molti altri, i metodi on e emit.

  • emit viene utilizzato per attivare un evento
  • on viene utilizzato per aggiungere una funzione di callback che verrà eseguita quando l'evento viene attivato

Ad esempio, creiamo un evento start, e per fornire un esempio, reagiamo a questo semplicemente eseguendo un log sulla console:

js
eventEmitter.on('start', () => {
  console.log('started')
})

Quando eseguiamo

js
eventEmitter.emit('start')

la funzione di gestione dell'evento viene attivata e otteniamo il log della console.

È possibile passare argomenti alla funzione di gestione dell'evento passandogli altri argomenti a emit():

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

Argomenti multipli:

js
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 una tantum
  • removeListener() / off(): rimuove un listener di eventi da un evento
  • removeAllListeners(): rimuove tutti i listener per un evento

È possibile leggere maggiori informazioni su questi metodi nella documentazione del modulo events.