venerdì, novembre 28, 2014

Signore e signori: node.js

Questo post sarà il primo di una lunga serie per scoprire node.js, una piattaforma di sviluppo basata sul linguaggio javascript.
Tutto ciò che abbiamo imparato fino ad ora è ovviamente propedeutico al suo utilizzo.

Come si recita nella home page di node.js:

Node.js è una piattaforma, costruita sul runtime scripting di Chrome, per costruire applicazioni di rete veloci e scalabili. Node.js usa un modello guidato dagli eventi, non bloccante, che lo rende leggero ed efficiente, perfetto per applicazioni real time che devono essere eseguite attraverso device distibuiti.

Al di là di un po' di fuffa da mercante, immaginate di prendere l'ambiente di esecuzione degli script di Chrome,di renderlo indipendente dal browser, di condirlo con un po' di tools di sviluppo a corredo, di renderlo open source: ecco che dopo un pò, la comunità degli smanettoni presente in rete ha cominciato a sviluppare una miriade di moduli per node.js: cioè oggetti javascript che espongono funzionalità tipicamente utili che possiamo utilizzare al volo nei nostri programmi.

Come primo passo, installiamo la piattaforma sul nostro pc, andate alla pagina di download  e scaricate e installate la distribuzione più consona al vostro pc.

Aggiungete al path di sistema la cartella in cui è presente l'interprete node (node.exe per sistemi windows), aprite una nuova shell e digitate node -v per testare l'installazione: se è andato tutto bene dovreste visualizzare un messaggio del tipo: v.0.10.28, che rappresenta la versione della piattaforma installata.

L'eseguibile node è un interprete javascript, è possibile usarlo in maniera interattiva mandandolo in esecuzione senza parametri


Vi basterà, dopo che compare il prompt '>', introdurre le istruzioni terminate con il ';' e battere <Enter> per eseguirle.

Non è ovviamente molto comodo da utilizzare, molto meglio creare un file con estensione .js (ad esempio mioProgramma,js) e darlo in pasto all'interpre con il comando node mioProgramma.js

Node.js è stato implementato seguendo il principio della modularità, un modulo di node.js è un oggetto js che sa fare molto bene uno specifico compito: i nostri programmi tipicamente utilizzano altri moduli per portare a terminie il compito che si prefiggono.

La piattaforma node.js ha una serie di moduli compresi nell'installazione, ad esempio il modulo fs serve ad interagire con il fyle system, per la lista completa degli oggetti globali (disponibili in ogni modulo) e la lista dei moduli basta dare un'occhiata alla pagina ufficiale delle api di node, sono molto ben fatte con esempi di utilizzo per ogni funzionalità a disposizione.

Ma la forza della piattaforma è data dalla possibilità di implementare moduli aggiuntivi che sono facilmente distribuibili e utilizzabili nei nostri programmi.

La piattaforma node.js comprende un applicativo per gestire i moduli installati sulla nostra macchina, l'applicazione si chiama npm che sta per node package manager, che ci permetterà di installare o rimuovere moduli aggiuntivi.

I moduli possono essere installati a livello globale e in tal modo saranno disponibili da qualsiasi programma che andremo a sviluppare, oppure possono essere installati a livello di progetto, e in tal modo saranno disponibili solo per il progetto in questione.

Per avere una lista dei moduli installati a livello globale, eseguite il comando npm -g list, vi comparirà una vista ad albero dei moduli installati con le relative dipendenze.

Per cominciare, vediamo un esempio di programma che utilizza uno dei moduli compresi nella piattaforma

 var fs = require('fs');  
 fs.readFile('readme.txt', {encoding: 'utf8'}, function(err,data) {  
   if (err) {  
    console.log('errore in lettura file');  
   }   
   else {  
     console.log(data);  
   }  
 });  
 console.log('Prima io!');  

Per utilizzare un modulo, bisogna utilizzare la funzione globale require, passando come parametro il nome del modulo che si vuole utilizzare, in questo caso il modulo fs.

Tipicamente la funzione require restituisce un oggetto che andremo a memorizzare in una variabile, in questo caso fs.

L'oggetto fs, tra i tanti metodi, ha il metodo readFile che permette di leggere il contenuto di un file, in questo caso il file readme.txt , codificato in utf8, che deve essere presente nella stessa directory di esecuzione del programma.

Notate la natura asincrona di questo metodo, il terzo parametro è la funzione di callback che verrà eseguita non appena il file è stato caricato completamente in memoria: il metodo non è bloccante.

La piattaforma include anche la versione sincrona, readFileSync, che per motivi di efficienza va chiaramente evitata, specialmente se i file da elaborare sono molto grandi.

Per eseguire questo programma

  • create un file ProgrammaLettutaFile.js e copiateci dentro il codice
  • create nella stessa cartella un file readme.txt, con codifica utf8, e scriveteci dentro ciò che vi pare
  • eseguite il programma con il comando node ProgrammaLettutaFile.js
Il programma stamperà  il contenuto del file a video: secondo voi stamperà prima contenuto del file o 'Prima io!' ?

Abbiamo appena cominciato la nostra avventura in node.js, c'è ancora tanto da imparare, lo faremo un post alla volta :).

Su github ho aggiornato gli esempi. Rimando a questo post i dettagli su come accedere a github per ottenere in locale i sorgenti.

Usate i commenti per eventuali problemi o dubbi!

Alla prox.
Ivan


4 commenti:

  1. Anonimo5:05 PM

    Non ho ancora compilato l'esempio, ma scommetto che sulla console compare:
    "Prima io!"
    testo del file
    (perché la lettura è asincrona)

    RispondiElimina
  2. ottimo blog fino a qui nessun problema....sei un ottimo insegnate Ivan :)

    RispondiElimina