Implementazione di un dispatcher ed esempio pratico

Vediamo come implementare un dispatcher per le applicazioni Node.JS per creare un webserver evoluto.

Array associativi

A pagina precedente abbiamo introdotto la struttura dati che si occupa di memorizzare l’elenco dei listeners. Vediamo adesso come implementare questa struttura dati. In particolare useremo un oggetto di questo tipo:

 

 

Che è proprio l’oggetto principale che memorizza l’elenco di tutti i listeners. Come visto a pagina precedente, l’oggetto dispone di due proprietà (get e post), aventi ciascuna come valore iniziale un array vuoto (le due parentesi quadre). Per comodità assegneremo l’elenco list come attributo di un oggetto specifico, che rappresenta il dispatcher nell’ambito della programmazione Object Oriented. Avremo quindi la “classe JavaScript”: HttpDispatcher:

 

 

il campo leadingName serve per gli eventuali messaggi di debug tramite il comando console.log. Subito dopo troviamo, come attributo di classe, la struttura dati di cui abbiamo parlato finora, seguita dalla funzione addListener, che si occupa di registrare i nuovi listeners all’interno della struttura dati. Essendo questa la parte più complicata del codice, rispolveriamo alcuni dei concetti fondamentali degli array associativi . In particolare ricordiamo che non esiste alcuna differenza sostanziale tra array associativi e oggetti JavaScript: in realtà si parla sempre di oggetti, che possono essere gestiti tramite le API degli array associativi. Ricordiamoci quindi che stiamo usando la sintassi degli array (le parentesi quadre), ma in realtà stiamo accedendo sempre e comunque alle proprietà di un oggetto. Per eventuali approfondimenti rimandiamo a questo articolo.

 

La sintassi degli array associativi permette di scorrere agevolmente l’elenco dei listeners, facendo però attenzione al nome corretto delle proprietà. Supponendo di aver già registrato dei listeners all’interno la classe HttpDispatcher, possiamo analizzare la struttura dati usando una funzione di introspezione, che risulta comoda sia a livello didattico, sia in caso di debug. Aggiungiamo questo metodo nella definizione della classe, subito dopo il corpo del metodo this.addListener.

 

notiamo la sintassi di accesso ai singoli oggetti della struttura dati. Per accedere alla callback del primo listeners del metodo HTTP GET usiamo qualcosa del genere:

mentre sarebbe sbagliato scrivere:

infatti, anche se la proprietà dell’oggetto si chiama “get”, se cercassimo di leggerla come qui sopra di motore JavaScript V8 andrebbe in realtà a cercare la proprietà di nome “key”, che in questo caso non esiste.