Dopo aver installato con successo Node.js ed aver compreso le basi del suo modello di programmazione ad eventi possiamo lanciarci nella scrittura del primo, semplice, web server. Il codice è breve ma consente di mettere in pratica tutti gli aspetti discussi nella lezione precedente:
var http = require('http');
var server = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
})
server.listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
Salviamo in un file helloworld.js
il contenuto del file, avviamolo con node helloworld.js
e facciamo puntare un browser a http://localhost:1337
. Dovremmo vedere il primo Hello World inviato da Node.js.
Esaminiamo il codice. La prima riga permette di includere il modulo http ed assegnarlo alla variabile http
. Successivamente viene invocata la funzione createServer
, che ritornerà un oggetto di tipo http.Server
e che come parametro prende una funzione callback, nel perfetto stile event-driven che abbiamo già introdotto nella lezione precedente.
La callback sarà invocata dal motore V8 ogni volta che il server riceverà una richiesta e assumerà come parametri:
- request, un oggetto della classe
http.ServerRequest
che rappresenta la richiesta HTTP e dalla quale poter leggere eventuali parametri inviati in GET o POST, la querystring etc.; - response, un'istanza della classe
http.ServerResponse
, utile per impostare il contenuto che si vorrà inviare all'utente ed eventuali altre informazioni.
Nel nostro esempio impostiamo nell'header HTTP della risposta il codice HTTP 200 (OK) e il Content-Type di tipo "text/plain". Poi, alla funzione end passiamo la stringa da ritornare al client.
Una volta definito il comportamento del nostro server web grazie alla callback possiamo finalmente metterlo in ascolto sfruttando la funzione listen passando numero di porta e ip dell'interfaccia di rete da utilizzare.
CommonJS e le API di Node.js
Una volta avviata la prima applicazione Node.js possiamo approfondire il più ampio discorso relativo alle API che abbiamo a disposizione.
Node.js aderisce al più ampio progetto denominato CommonJS che si pone come obbietivo quello di avere un insieme di API coerenti e soprattutto standard tra i molti interpreti JavaScript attualmente disponibili.
Le Specifiche CommonJS sono molte e di diversa natura, approvate o
ancora in fase di progettazione. Al momento Node.js implementa nativamente gli standard Modules/1.0 e Unit Testing/1.0 mentre sono disponibili delle librerie esterne per gli standard Promises/B e Promises/D.
Ovviamente oltre a CommonJS, il framework presenta una serie di API proprietarie che permettono di effettuare praticamente qualsiasi operazione a livello di rete e di socket, oltre alle librerie di alto livello come HTTP, SSL o DNS.
Il registro NPM
NPM rappresenta quello che per Ruby è Gem e per PHP è PEAR, ovvero un repository di librerie scritte apposta per poter essere utilizzate con Node.js. Oltre al semplice repository web, NPM presenta anche un comando per scaricare, ricercare ed aggiornare i pacchetti software da includere
nelle nostre applicazioni.
È disponibile solo per piattaforme UNIX-like e la sua installazione è banale se si dispone di curl
, basta infatti scrivere:
curl http://npmjs.org/install.sh | sh
Per installare un pacchetto invece basta un semplice:
npm install nome-pacchetto
Sono disponibili online sia l'elenco dei pacchetti, sia la documentazione ufficiale.