{"id":11637,"date":"2016-03-23T11:51:09","date_gmt":"2016-03-23T10:51:09","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11637"},"modified":"2016-06-07T14:53:11","modified_gmt":"2016-06-07T12:53:11","slug":"introduzione-a-node-js","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/introduzione-a-node-js\/","title":{"rendered":"Introduzione a Node.js"},"content":{"rendered":"<p><a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\">Node.js<\/a> rappresenta gi\u00e0 una pietra miliare nella storia dell&#8217;informatica. Propone un modo per poter realizzare applicazioni lato server in Javascript. A chi \u00e8 legato al concetto classico di web la cosa suoner\u00e0 un p\u00f2 strana. Javascript infatti \u00e8 sempre stato visto come il linguaggio\u00a0che ha dato il soffio di vita alle pagine statiche HTML, immobili nella loro struttura. Tutto \u00e8 rimasto cos\u00ec finch\u00e8 Google non ha creato il <strong>motore V8<\/strong> che processava Javascript con lo scopo di ottimizzare il funzionamento del browser Chrome. Il progetto \u00e8 diventato cos\u00ec autonomo nel tempo che si \u00e8 dimostrato in grado di funzionare indipendentemente, senza un browser collegato, permettendo la realizzazione di applicazioni <em>stand alone<\/em>.<\/p>\n<p><strong>Node.js si fonda su V8<\/strong> e una volta installato permette di scrivere righe di codice Javascript ed attivarle da riga di comando. Questa piattaforma \u00e8 diventata un modo molto comune e performante per creare applicazioni web o servizi on line che forniscano accesso a database, attivino funzionalit\u00e0 o svolgano elaborazioni offrendo il tutto tramite comode API per l&#8217;interazione con un client di qualunque genere.<\/p>\n<p>Questo articolo si pone lo scopo di offrire una panoramica introduttiva a Node.js e di essere solo il primo di una serie che permetter\u00e0 di creare un proprio set di API.<\/p>\n<h2>Installazione<\/h2>\n<p>Node.js \u00e8 un progetto multipiattaforma quindi dalla <a href=\"https:\/\/nodejs.org\/en\/download\/\" target=\"_blank\">pagina ufficiale<\/a> del sito \u00e8 possibile scaricare l&#8217;installer per Windows o Mac nonch\u00e8\u00a0il codice sorgente. Sono anche disponibili pacchetti di eseguibili per altre piattaforme mentre tutte le principali distribuzioni Linux ne permettono l&#8217;installazione tramite repository ufficiale.<\/p>\n<p>Nella maggior parte dei metodi, l&#8217;installazione non dovrebbe creare alcun problema e, una volta conclusa, Node.js sar\u00e0 disponibile e attivabile tramite il comando <em>node<\/em>.<\/p>\n<p>Per verificare la corretta configurazione dell&#8217;ambiente, si potr\u00e0 creare un primo file che chiameremo primo.js ed inserirvi all&#8217;interno:<\/p>\n<pre class=\"lang:js decode:true \">\/* Iniziamo con Node.js. Facciamo un Hello World *\/\r\nconsole.log(\"Ciao Mondo!\")<\/pre>\n<p>A questo punto da riga di comando si potr\u00e0 inviare:<\/p>\n<pre class=\"lang:sh decode:true\">node primo.js<\/pre>\n<p>In output, vedremo apparire la stringa &#8220;Ciao Mondo!&#8221; il che dimostrer\u00e0 due cose: la nostra piattaforma \u00e8 pronta al lavoro e siamo riusciti a mandare\u00a0in esecuzione \u00a0il nostro primo programma con Node.js.<\/p>\n<p>Con un p\u00f2 di esperienza in Javascript, si vede che le due righe scritte non sono altro che un commento ed un&#8217;invocazione alla console, come faremmo in Chrome.<\/p>\n<h2>Interagire in HTTP<\/h2>\n<p>Visto che, come abbiamo detto, ci interessa usare Node.js per l&#8217;interazione in Rete vediamo un altro classico esempio che ci proietta velocemente in un contesto &#8220;web&#8221;:<\/p>\n<pre class=\"lang:js decode:true \">var http = require(\"http\") ;\r\n\r\nfunction getResponse(request, response) {\r\n      response.writeHead(200, {\"Content-Type\": \"text\/plain\"}) ;\r\n      response.write(\"Rispondo alla richiesta\");\r\n      response.end() ;\r\n} \r\nhttp.createServer(getResponse).listen(8100) ;\r\nconsole.log(\"Server in esecuzione... Inviare richieste\") ;<\/pre>\n<p>Alla prima riga, importiamo il modulo http che consentir\u00e0 il trattamento di questo protocollo di comunicazione.\u00a0Node.js ha un&#8217;anima profondamente modulare quindi ci abitueremo presto a questo approccio, per cos\u00ec dire, di integrazione.<\/p>\n<p>Il server vero e proprio viene avviato con il metodo <em>createServer<\/em> che ricever\u00e0 come informazioni operative la porta TCP di esecuzione &#8211; 8100 in questo caso &#8211; e la funzione che rappresenter\u00e0 le operazioni svolte ad ogni richiesta client, <em>getResponse<\/em>.<\/p>\n<p>Il protocollo HTTP, nel suo funzionamento pi\u00f9 intimo, \u00e8 piuttosto semplice. Si basa su un modello richiesta\/risposta, entrambe strutturate su attributi divisi in intestazioni (headers) e corpo. Il metodo <em>getResponse<\/em> prende in input due oggetti, rappresentanti rispettivamente, per l&#8217;appunto, la richiesta e la risposta: request e response.<\/p>\n<p>Al moment,o non leggeremo ancora il contenuto della richiesta ma ci accontenteremo di produrre una risposta. In <em>getResponse<\/em> invocheremo il metodo <em>writeHead<\/em> per produrre intestazioni e \u00a0il metodo <em>write<\/em> per fornire contenuti. Invocando infine il metodo <em>end<\/em> la risposta preparata viene fornita al client.<\/p>\n<p>Una volta scritto, il programma che abbiamo registrato nel file primo_server.js potr\u00e0 essere mandato in esecuzione:<\/p>\n<pre class=\"lang:js decode:true \">node primo_server.js<\/pre>\n<p>potremo provarlo invocando dal browser l&#8217;indirizzo <a href=\"http:\/\/localhost:8100\" target=\"_blank\">http:\/\/localhost:8100<\/a>.<\/p>\n<p>Nell&#8217;output vedremo produrre la stringa\u00a0&#8220;Rispondo alla richiesta&#8221; inviata tramite i comandi <em>write<\/em>, segno comunque che il metodo <em>getResponse<\/em> \u00e8 stato attivato.<\/p>\n<h2>NPM<\/h2>\n<p>Una funzionalit\u00e0 molto utile che ormai viene sempre distribuita con Node.js \u00e8 <strong>npm<\/strong>, un package manager che permette di scaricare pacchetti da integrare nella piattaforma e poter, successivamente, sfruttare nell&#8217;applicazione dopo aver invocato la direttiva <em>require<\/em>.<\/p>\n<p>Per installare un pacchetto via npm \u00e8 sufficiente il seguente:<\/p>\n<pre class=\"lang:js decode:true\">npm install &lt;nome pacchetto&gt;<\/pre>\n<p>dove dovremo specificare il nome del pacchetto\u00a0cui siamo interessati.<\/p>\n<p>In alternativa a <em>install<\/em>, a seconda dei casi, si possono utilizzare:<\/p>\n<ul>\n<li><em>uninstall<\/em> per la rimozione del modulo;<\/li>\n<li><em>search<\/em> per controllare che un modulo esista;<\/li>\n<li><em>update<\/em> per provvedere all&#8217;aggiornamento del modulo.<\/li>\n<\/ul>\n<p>Tutte queste operazioni verranno svolte da npm attingendo ai pacchetti collocati nei suoi\u00a0repository remoti.<\/p>\n<h2>Conclusioni<\/h2>\n<p>Quello che si \u00e8 visto in questo tutorial \u00e8 solo un approccio rapido a Node.js. Il discorso ovviamente verr\u00e0 ripreso e\u00a0mirer\u00e0 ad espandere sempre pi\u00f9 le nostre funzionalit\u00e0 lato server implementate fino a creare un servizio completo basato su API.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js rappresenta gi\u00e0 una pietra miliare nella storia dell&#8217;informatica. Propone un modo per poter realizzare applicazioni lato&#8230;<\/p>\n","protected":false},"author":561,"featured_media":11863,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[1276,1538,1537,1581],"class_list":["post-11637","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial-pratici","tag-google","tag-javascript","tag-node-js","tag-web"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11637"}],"version-history":[{"count":8,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11637\/revisions"}],"predecessor-version":[{"id":12091,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11637\/revisions\/12091"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11863"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}