jQuery Tutorial

Node ed Express per applicazioni lato server

Articolo a cura di: Davide Copelli{ing}

Facebook

Che diavolo è Node.js? Che diavolo è Express? Queste sono le domande che anch'io mi sono fatto qualche anno fa, quando il web era "dominato" da linguaggi come PHP, Java, Python, ASP.net (fortunatamente ancora oggi persistono!)

Abituato per più di 12 anni, a sviluppare progetti con le tecnologie che si sono affermate alla fine degli anni 90, all'inizio ho fatto un pò di fatica a capire cosa fossero. Poi le cose sono diventate più chiare, perché ho capito che si ritornava a parlare dell'"amato/odiato" JavaScript e di tecniche alternative per gestire le richieste lato server, inviate dagli utenti con il loro browser. Quindi nulla di così "rivoluzionario". Il web avrebbe continuato ad esistere anche senza Node.

Node o Node.js quindi, non è un nuovo linguaggio di programmazione (come molti erroneamente scrivono), ma un nuovo modo di progettare applicazioni di rete lato server sfruttando il linguaggio JavaScript. Prima di spiegare in dettaglio cosa sia Node, facciamoci però una domanda importante:

Dove si pubblica un'applicazione che sfrutta Node.js?

Per progettare un'applicazione o sito web che sfrutti Node, devi ahimè avere un web server in grado di gestire questo tipo di progetti. Con molta probabilità, non va bene quello che stai usando ora per il tuo sito web.

Questo è il primo scoglio che anch'io ho dovuto affrontare, perché i primi tempi (anno 2010/11), poche erano le società di hosting in grado di offrire spazi web con supporto per Node. Anche oggi, molte delle più blasonate società di hosting italiano, non offrono questo supporto, limitandosi ai classici linguaggi come PHP, Perl, Python, Ruby o ASP.net.

Quindi se anche tu ti sei fatto la domanda: "dove caz...spita devo pubblicare il mio progetto adesso?",  fortunatamente oggi esiste una risposta semplice.

Qui sotto ho elencato alcuni link di servizi gratuiti, che puoi subito prendere nota nel caso volessi un giorno testare le righe di codice, accedendo da un indirizzo web pubblico e non in locale al tuo computer:

Open Shift - https://www.openshift.com
Nodejitzu - https://www.nodejitsu.com
Azure (*anche a pagamento) - https://www.azure.com

e qui alcuni dei tanti servizi a pagamento:

Heroku - https://www.heroku.com
DigitalOcean - https://www.digitalocean.com
SiteGround - https://www.siteground.it/

Come si crea l'interfaccia di una Web APP che sfrutta Node?

Per l'interfaccia fortunatamente possiamo continuare ad usare l'amato HTML, i CSS e jQuery, quest'ultimo utile per effettuare e gestire tutte le chiamate da fare lato server. Questa è la tipica "valigia" di conoscenze che devi portare sempre con te, ma se hai già seguito i nostri corsi, dovresti essere un esperto.

Cos'è Node?

Chiarito che non ci troviamo difronte a un nuovo linguaggio di programmazione, se ci affidiamo a quello scritto nel sito ufficiale "Node.js® è un runtime Javascript costruito sul motore JavaScript V8 di Chrome" non capiremo molto. Forse per capire meglio, dovremmo farci la domanda correlata, ossia perché è nato Node?

Ebbene, se agli inizi degli anni 2000 internet aveva qualche centinaio di milioni di utenti, ora la situazione è cambiata. All'aumentare del numero di connessioni in rete contemporanee, sorse il problema di come gestirle al meglio, senza investire troppo in risorse hardware.

Ecco allora l'esigenza di sviluppare un nuovo modello di gestione del sistema operativo delle singole macchine collegate in rete, che non sfruttasse più i thread concorrenti, quindi un thread per ogni richiesta, andando a sprecare RAM e potenzialmente esaurendola completamente, ma un modello basato su un singolo thread, in grado di gestire più richieste Input e Output (I/O) senza bloccare la coda. Un thread sempre attivo e in grado di rispondere ai diversi eventi legati alle richieste pervenute, come esemplificato nelle due immagini qui sotto (Server "Classico" vs Server con Node):

Vincent Wu‏ @Diwouai90

single thread node
Vincent Wu‏ @Diwouai90

Node.js, nasce quindi per creare un nuovo modello di networking, non più vincolato al classico modello senza stato con cui si sviluppava sul web nei primi anni 2000, ma che funzioni sul modello di applicazioni come gmail (ossia sempre in "ascolto" - Event Loop), da cui l'inventore di Node ha preso spunto per creare questa piattaforma.

Una piattaforma che migliori le performance di quelle applicazioni lato server, sottoposte a un "massacrante" livello di semplici richieste simultanee di Input e Output (scrittura e lettura), da erogare a decine di migliaia di utenti contemporaneamente in tempo reale. E con il termine "semplice", intendo la richiesta e l'invio di piccole quantità di dati, come il "like" su un post di facebook, un messaggio, una quotazione di un titolo in borsa etc

Il tutto sfruttando la facilità e versatilità del linguaggio JavaScript, utilizzato però anche lato server. Node, viene spesso sfruttato per realizzare API, ossia interfacce web che permettono di ottenere delle informazioni non appena le si interroga da un opportuno indirizzo web (es. quotazioni in borsa, tempo nella tua città etc), sia per il backend di complesse applicazioni web scalabili come appunto gmail o siti ad altro traffico e con dati che si aggiornano velocemente.

Sfruttando questo modello, diventa fondamentale progettare applicazioni che non blocchino il famoso singolo "thread" a cui sono collegate, per evitare di bloccare tutte le successive richieste. Questo è il motivo per cui Node non è tipicamente usato per applicazioni che richiedono grandi capacità di calcolo (CPU) o per interrogazioni "pesanti" su database relazionali (anche se per questo problema esistono delle soluzioni, come l'implementazione di zone - vedi Napa - e un insieme di processi che lavorano su questa).

Devi allora abbandonare l'uso di linguaggi "vetusti" come PHP, ASP.net etc?

Assolutamente NO! Ogni strumento va usato in base all'effettivo beneficio che porta, quindi se il tuo sito ha poche migliaia di utenti al giorno, se prevedi che da qui a pochi anni non possa aumentare del 5000% e non deve mostrare informazioni aggiornate ogni secondo, puoi stare tranquillo che non otterrai alcun beneficio nell'usare Node, se non quello di imparare una nuova piattaforma di sviluppo delle applicazioni lato server.

Che software si utilizza per scrivere un'applicazione lato server con Node?

Risposta semplice: un qualsiasi editor di testo! Trattandosi di scrivere codice JavaScript vanno bene tutti gli IDE che hanno integrate le classiche funzionalità che conosci ormai molto bene, come la colorazione del codice, gli snippet, l'accesso alla finestra terminale etc etc. Ricordo tra i più usati, Visual Studio Code, Atom, Sublime, Visual Studio, Bracket etc

Da dove partire per creare un'applicazione lato server con Node?

La prima domanda da farsi è: posso sviluppare un'applicazione in locale e poi trasferirla sul server dove è ospitato il mio sito? Ricordando le caratteristiche che deve comunque avere il web server, certamente è possibile iniziare a progettare la propria applicazione in locale e fare tutti i test del caso prima di passare nell'ambiente di produzione. Nel prossimo tutorial: "Installare Node e creare la tua prima applicazione" vedremo tutti i passaggi.

Com'è il codice della semplice applicazione in grado di rispondere ad una richiesta fatta dall'utente con la classica scritta "Hello World"?

Se nel mondo PHP è sufficiente scrivere 2 righe e salvarle all'interno di un file con estensione .php:

<?php
echo "Hello World";

oppure in Python, con una sola riga, salvata all'interno di un file .py:

print('Hello World')

nel mondo Node, è necessario scrivere qualche riga in più e salvarla all'interno di un file .js (sì hai capito bene: JS):

var http = require("http");
http.createServer((req, resp) => {
  resp.end('Hello World\n');
}).listen(8000);

I tre codici danno come risultato lo stesso Output ("Hello World"), ma in Node è necessario "sudare" un pò di più perché è necessario anche creare gli oggetti in grado di gestire tutte le richieste provenienti dal client (utente) e le risposte che deve dare l'applicazione lato server.

Stai forse rimpiangendo la facilità di scrittura di un'applicazione PHP? No, non demordere proprio ora.

Cos'è Express?

Tornando alle domande iniziali e avendo cercato di spiegare cos'è Node, vediamo ora cosa sia invece Express. Non è un tipo di caffè, nè tantomeno un famoso treno, ma il tentativo di semplificare la scrittura di determinate operazioni che un'applicazione web deve fare, e come tutte le semplificazioni, sono sempre ben accette da tutti gli sviluppatori.

Si tratta quindi di un framework, definito "minimalista e non-opinabile", quindi concepito per semplificare la scrittura di poche operazioni base, senza imposizione di vincoli sul modo corretto di implementarle. Questo ha permesso un esponenziale utilizzo del framework da parte degli sviluppatori, e lo sviluppo di tutta una serie di librerie di terze parti, che permettono di gestire gran parte delle necessità richieste da un'applicazione web (cookie, parsing richieste HTTP, gestione errori, autenticazione login, download etc).

Un'applicazione che sfrutta Node, creata con il framework Express, viene spesso detta applicazione Express. Ad esempio, lo stesso codice visto in precedenza, può essere riscritto con Express in questo modo:

var express = require('express');
var app = express();
app.get('/', (req,resp)=> {
  resp.send('Hello World');
}).listen('8000');

Come puoi osservare sono molto simili, solo che iniziamo a intravedere delle parole che forse ci fanno capire meglio cosa sta sucedendo, perché troviamo la parola get, send e troviamo il simbolo dello slash (/). Potresti dire quindi che si tratta della gestione di una richiesta GET fatta dall'utente interrogando l'url principale del tuo sito, ossia la radice, e di una risposta che il server invia.

Già si inizia a intravedere come sarà strutturata un'applicazione Express, ma avremo modo di approfondire molti concetti in uno dei prossimi tutorial o chissà in un videocorso operativo sullo sviluppo di API con Node. Per ora ti invito a iscriverti gratuitamente alla nuova piattaforma online in fase beta: Web StartUniversity


Davide Copelli{ing}Davide Copelli {ing} - Mi occupo di Web Marketing, Email Marketing, SEO, Programmazione, dal 2001, quando ho fondato la mia società di consulenza DCOP. Nel 2003 ho fondato il primo portale in Italia di e-learning sulla programmazione web, tramite VideoCorsi (Video-Corsi.com), molto prima della nascita di YouTube e del fenomeno "video". Sono "Chief Digital Media Planner" di GreeniTop.com, di cui sono co-fondatore.

Ricevi le anteprime dei nuovi corsi! Iscriviti Gratuitamente

La tua email è al sicuro. Potrai cancellarti definitivamente con un click e in ogni istante. Odiamo lo spam!

×