Introduzione ai moduli di Node.js

I moduli più importanti di Node.js: vediamo quali sono disponibili di default e come possiamo installarne di nuovi con pochi e semplici passi.

Nelle lezioni precedenti abbiamo introdotto i concetti elementari di Node.js, soffermandoci su come sia possibile sfruttare le competenze JavaScript per realizzare script server-side. Per chi non conoscesse Node.js, rimandiamo alla prima lezione per un’introduzione generale all’argomento, oppure alla seconda lezione per qualche esempio di scripting server-side realizzato usando le consuete funzioni JavaScript.

Siamo finalmente pronti a vedere quali sono i moduli più importanti di Node.js, iniziando da quelli disponibili sin dalla prima installazione. Con l’occasione vedremo anche come procedere per installare un nuovo modulo, non disponibile tra quelli di “default”.

Moduli nativi

Nella prima lezione abbiamo enumerato tra i punti di forza di Node.js sia la semplicità, per chi conosce già JavaScript, sia la scalabilità, che lo rendono adatto ad applicazioni professionali. Tale scalabilità dipende anche dalla possibilità di aggiungere moduli alla nostra installazione di Node.js, un po’ come si fa con PHP e Apache. I moduli che risultano disponibili sin dalla prima installazione sono detti nativi. Se vogliamo sbirciare nel file system per capire quali sono i moduli installati, e dove si trovano, possiamo digitare comando

 

questo per trovare la directory di installazione di Node.js. Il comando, seppur originario dei sistemi Unix-like, da qualche anno funziona anche sugli ultimi sistemi operativi della Microsoft. In quest’ultimo caso dobbiamo fare attenzione al nome del percorso, che probabilmente sarà diverso da quello visualizzato nella finestra dell’Esplora Risorse. Ad esempio, se i nostri moduli si trovano qui

 

 

molto probabilmente l’Esplora Risorse visualizzerà tale directory all’interno del percorso

 

C:Programmi... ecc.

A parte qualche differenza dovuta al sistema operativo, i moduli nativi dovrebbero trovarsi all’interno della directory npm. Come vedremo, questo coincide col nome del repository dove sono disponibili i moduli di Node.js.

L’utilizzo di un modulo nativo è molto semplice. Nelle lezioni precedenti abbiamo già usato il modulo Http, richiamandolo con l’istruzione

 

 

Caricando questo modulo rendiamo disponibili sia le funzioni contenute nel modulo, sia le eventuali variabili globali, ma soprattutto rendiamo disponibili nuovi oggetti, che possiamo gestire in modo simile ai normali oggetti JavaScript del paradigma Object Oriented. Ad esempio, negli snippet illustrati nelle lezioni precedenti, abbiamo fatto riferimento alle richieste e risposte del protocollo HTTP. Ciò significa che abbiamo usato istanze degli oggetti http.ServerRequest e http.ServerResponse, che sono proprio oggetti caricati assieme al modulo “http”.

 

 

Installazione di un modulo

Installazione di un modulo

Oltre al modulo “http”, nelle scorse elezioni abbiamo usato (in modo implicito) il modulo Globals. Queste è forse il modulo più importante di Node.js, perché permette di gestire e utilizzare gli altri moduli. Esso contiene infatti la funzione require, che come abbiamo visto serve proprio a caricare un altro modulo. Per questo motivo il modulo “globals” è sempre disponibile. Esso implementa tra l’altro alcune delle API comuni al paradigma JavaScript client-side. Qui troviamo, ad esempio, sia le funzioni setTimeout e setInterval, sia l’oggetto console, che abbiamo usato nelle prime lezioni. Il modulo definisce anche alcune variabili globali che ricordano quelle del paradigma PHP, come ad esempio “__filename” e” __dirname”, che indicano rispettivamente il nome dello script in esecuzione e il nome della cartella corrente.

Vediamo adesso come installare un nuovo modulo. Questa procedura è necessaria tutte le volte che abbiamo bisogno di un modulo specifico, non disponibile tra quelli nativi. Ciò significa, in particolare, che alcuni di questi moduli “extra” potrebbero non essere disponibili per tutti i sistemi operativi. Prima di installare un modulo non nativo è quindi necessario verificare che sia supportato dalla nostra piattaforma. La lista dei moduli nel repository NPM è disponibile qui.

 

Prima di iniziare l’installazione, spesso è necessario controllare la versione di Node.js, questo perché in alcuni casi il supporto del modulo dipende dalla versione attualmente installata sulla nostra macchina. Per conoscere la versione di Node.js digitiamo il comando

 

 

Il modulo socket.io

Per vedere un esempio concreto consideriamo l’installazione del modulo socket.io. Questo modulo permette di gestire le connessioni via socket a basso livello. Il modulo ci servirà nel corso delle prossime lezioni, perciò non preoccupiamoci di capire in dettaglio a cosa serve: al momento lo useremo solo come esempio di procedura di installazione di un nuovo componente.
Cominciamo dal verificare che la nostra versione di Node.js sia adatta all’installazione del modulo “socket.io”. Se lavoriamo su sistemi Unix-like molto probabilmente non avremo problemi, se invece usiamo Windows dobbiamo verificare che la nostra versione sia successiva alla 0.6.
Per installare il modulo digitiamo il comando

 

 

se qualcosa non funziona proviamo a controllare sia i permessi di accesso (problema tipico su Linux) sia la configurazione del firewall (problema tipico su Windows). A seconda della versione di Node.js, e del sistema operativo, durante l’installazione potremmo aver bisogno di accedere alla cartella node_modules. Per verificare che l’installazione sia andata a buon fine, basta inserire la riga seguente in un qualsiasi snippet di Node.js

 

 

Dove app è la solita istanza del server HTTP creato nelle lezioni precedenti. In questo modo, quando lanceremo lo script, nella console dovremmo ottenere come risultato

 

 

In caso di dubbi o problemi specifici sull’installazione del modulo “socket.io” possiamo dare un’occhiata a questo articolo.

 

 

Il modulo File System

Il modulo File System

Introduciamo adesso un altro modulo nativo che possiamo considerare tra i più importanti di Node.js: il modulo File System o fs. Com’è deducibile dal suo nome, il modulo permette di leggere e scrivere risorse nel file system del server. Questo modulo può essere utilizzato in combinazione con il modulo Path, che invece si occupa di trattare i percorsi delle directory come stringhe. Come vedremo nel prossimo esempio, possiamo ottenere dei risultati interessanti anche utilizzando il modulo “File System” in modalità stand-alone, senza ricorrere all’aiuto del modulo “Path”. La documentazione ufficiale del modulo “fs” è disponibile qui.

 

Consideriamo il seguente script

 

 

La prima riga (var fs = require('fs')) è quella che carica il modulo “File System”. Il resto del codice dovrebbe essere abbastanza chiaro, perché somiglia a quello visto nelle lezioni precedenti, rispetto alle quali abbiamo introdotto principalmente due novità. La prima è l’uso della variabile globale __dirname, che come abbiamo già detto ritorna la directory corrente di lavoro, ovvero quella dove dovrebbe trovarsi il nostro script. La seconda novità riguarda l’uso della funzione readFile, che va a leggere il file “prova.html” dal disco. In particolare la funzione chiede come argomento una callback che si occuperà di gestire l’esito dell’evento associato alla lettura del file.

Oltre allo script, dobbiamo ovviamente generare un file HTML e chiamarlo “prova.html”: questo file va collocato nella stessa directory dello script Node.js. Il risultato è un mini web-server HTTP. Ad ogni richiesta del browser sull’indirizzo locale (e porta 8080), verrà restituito il codice HTML contenuto del file “prova.html”. In altre parole, se chiamassimo “index.html” il nostro file, avremmo un comportamento quasi identico (lato utente) a quello di un normale web server. Notare che abbiamo ottenuto questo risultato con solo una decina di righe! Prima di concludere citiamo anche il modulo util, che contiene funzioni per la formattazione di date, stringhe, funzionalità di debug e altre utilità, come ad esempio l’introspezione delle variabili. Altri moduli degni di nota sono url e net, che riguardano rispettivamente la gestione degli url e la creazione di connessioni di basso livello, per certi versi simili a quelle di socket.io. Nelle prossime lezioni vedremo come mettere assieme alcuni di questi moduli per realizzare script man mano più interessanti.

Facci sapere cosa ne pensi!

  1. Gabriele Valenti says

    Salve volevo chiedere un’informazione, magari sapete aiutarmi. Sto lavorando ad un progetto e sto utilizzando un server node.js.
    Utilizzando le vecchie versioni delle socket.io, mi girava tutto alla perfezione.
    Ora ho dovuto reinstallare tutto quanto e quindi le nuove versioni della socket.io.
    Quando provo a mandare il comando npm install socket.io mi da questi errori:
    ws@0.5.0 install C:\…\node_modules\socket.io\node_modules\engine.io\node_modules\ws
    > (node-gyp rebuild 2>builderror.log) exit0

    e un altro paio di errori simili. All’interno della cartella node_modules viene creata quella socket.io ma il progetto non gira.

    Sapete aiutarmi?

    Grazie!

  2. Lorenzo says

    Ho un problema nell’installazione di socket.io, nonostante nell’articolo non sia indispensabile l’utilizzo di socket.io vorrei sapere il perché.
    Dal prompt i primi errori che ricevo sono:
    gyp ERROR configure error
    gyp ERROR can’t find python executable …

Facci sapere cosa ne pensi!

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *