Node.js Step by Step Introduzione

Node.js è una nuova straordinaria tecnologia, ma, a meno che tu non sia specificamente uno sviluppatore JavaScript, il processo di familiarizzazione con esso può rapidamente diventare un po 'schiacciante. Ma è per questo che siamo qui! Se lo desidera veramente impara come usare Node.js, questo set di articoli e screencast farà il trucco.


Un'introduzione a Node.js


Transcript Screencast

Ciao ragazzi, mi chiamo Christopher Roach e sarò la vostra guida per tutta questa serie di screencast su Node.js. In questa serie utilizzeremo Nodo per creare un motore di blog semplice, come quello reso famoso nel popolare video introduttivo di Ruby on Rails. L'obiettivo di questa serie è di offrire a te, spettatore, una sensazione reale di come funziona Node in modo che, anche quando lavori con uno dei famosi framework di sviluppo web, come Express o Getty, ti sentirai abbastanza a tuo agio con il funzionamento interno di Node per essere in grado di scendere nella sua fonte e apportare modifiche in base alle proprie esigenze, se necessario.


Installazione

Prima di entrare in alcuni dettagli su cosa sia Node e perché vorresti usarlo, mi piacerebbe andare avanti e iniziare con l'installazione di Node, dal momento che, anche se molto semplice, ci vuole del tempo.

Il nodo è ancora molto giovane ed è in fase di sviluppo attivo, quindi è meglio installarlo dal sorgente.

Il nodo è ancora molto giovane ed è in fase di sviluppo attivo, quindi è meglio installarlo dal sorgente. Detto questo, Node ha pochissime dipendenze, e quindi la compilazione non è neanche lontanamente complicata come altri progetti con cui potresti aver combattuto in passato. Per ottenere il codice, visitare il sito Web Node.js. Se scorri la pagina verso il basso nella sezione download, troverai un paio di scelte. Se hai installato Git, puoi fare un clone del repository e installarlo da lì. Altrimenti, c'è un link a un tarball che puoi scaricare. In questo video, terrò le cose semplici e installerò dal tarball.

Mentre questo è il download, ora è il momento giusto per ricordare che sono in corso tentativi per fornire una porta di Node per Windows, e ci sono istruzioni per l'installazione su Windows per Cygwin o MinGW. Credo che ci siano anche dei pacchetti binari che è possibile installare, ma al momento della stesura di questo documento, l'ambiente principale è Unix e piattaforme basate su Linux. Se sei su una macchina Windows, puoi cliccare sul link per le istruzioni di costruzione e seguire le istruzioni per l'installazione di Windows oppure puoi installare una versione di Linux, come Ubuntu, e installare lì il Nodo.

Al termine del download, basta decomprimere e decomprimere il pacchetto con tar -xvf e CD nella directory creata. Per prima cosa dobbiamo fare a ./ configure, poi rendere, e infine fare installare. Ci vorrà un po 'di tempo per costruire, quindi lascerò correre in background e cogliere l'occasione per parlare un po' di più del Nodo, e perché sta causando un tale scalpore nella comunità di sviluppo web.


Introduzione al nodo

Nodo è JavaScript sul server.

Quindi, se questo articolo e questo video sono la tua prima introduzione al Nodo, probabilmente ti starai chiedendo cosa sia e cosa valga la pena imparare quando ci sono già così tanti altri framework di sviluppo web là fuori da cui scegliere. Per cominciare, una ragione per cui dovresti preoccuparti è che il nodo è JavaScript sul server, e diciamocelo, se lavori sul web, lo ami o lo odi, dovrai lavorare con JavaScript ad un certo punto . Usare JavaScript come linguaggio di back-end e per il lato client significa cambiare molto meno contesto per il tuo cervello.

Oh, so a cosa stai pensando: "così Nodo è JavaScript sul server, beh, è ​​grandioso, ma ci sono stati altri JavaScript sui tentativi del server in passato che sono stati fondamentalmente limitati".

Ciò che rende Node diverso dal resto?

Bene, la risposta breve è: Node è JavaScript sul lato server, infine fatto bene. Laddove altri tentativi sono stati fondamentalmente portali dei tradizionali framework MVC sul linguaggio JavaScript, Node è qualcosa di completamente diverso. Secondo il suo sito Web, Node è I / O evento per V8 JavaScript, ma cosa significa esattamente? Iniziamo con V8.

V8 è l'implementazione JavaScript super veloce di Google utilizzata nel browser Chrome.

Attraverso l'applicazione davvero ingegnosa della compilation "Just in Time", V8 è in grado di raggiungere velocità per JavaScript che rendono gli utenti di altri linguaggi dinamici, come Python e Ruby, ecologicamente invidiosi. Dai uno sguardo ad alcuni dei benchmark e credo che rimarrai stupito. V8 JavaScript è lassù con molti linguaggi basati su JVM come Clojure e Java e lingue compilate, come Go in molti casi.

La capacità di JavaScript di aggirare le chiusure rende la programmazione basata sugli eventi estremamente semplice.

L'altra frase chiave in tale affermazione è I / O evento. Questo è il biggie. Quando si tratta di creare un server Web, in pratica si hanno due scelte da fare quando si gestiscono più richieste di connessione simultanee. Il primo, che è il percorso più tradizionale adottato dai server Web come Apache, consiste nell'utilizzare i thread per gestire le richieste di connessione in entrata. L'altro metodo, quello preso da Node e alcuni server moderni estremamente veloci come Nginx e Thin, consiste nell'utilizzare un singolo thread non bloccante con un ciclo di eventi. È qui che la decisione di utilizzare JavaScript brilla davvero, dal momento che JavaScript è stato progettato per essere utilizzato in un singolo ambiente basato su loop di eventi thread: il browser. La capacità di JavaScript di aggirare le chiusure rende la programmazione basata sugli eventi estremamente semplice. Fondamentalmente basta chiamare una funzione per eseguire un qualche tipo di I / O e passargli una funzione di callback e JavaScript crea automaticamente una chiusura, assicurandosi che lo stato corretto venga preservato anche dopo che la funzione chiamante è andata via da molto tempo. Ma tutto questo è solo un gergo tecnico e sono sicuro che stai morendo dalla voglia di vedere qualche codice in azione. Ho intenzione di andare avanti un po 'alla fine di questa installazione, così possiamo iniziare a giocare con la nostra nuovissima copia di Node appena coniata.


Conferma dell'installazione

Quindi, sembra che la mia build sia finalmente finita; Voglio controllare rapidamente e assicurarmi che tutto sia andato bene con l'installazione. Per farlo, basta correre nodo --versione dalla riga di comando, e dovresti vedere qualche indicazione che stai usando l'ultima versione di Node che, attualmente, è la versione 0.4.5. Se vedi una versione stampata, puoi essere certo che tutto è andato a buon fine e sei pronto per scrivere la tua prima app Node. Quindi, andiamo CD torna nella nostra home directory e crea una nuova cartella per conservare tutto il nostro lavoro nel corso di questa serie di screencast. Qui chiamerò semplicemente il mio 'blog'e andiamo CD in quello per iniziare.


Nodo: il framework del server

A differenza di altri framework, Node non è strettamente per lo sviluppo web. In effetti, puoi pensare a Node come a un framework per lo sviluppo di server di qualsiasi tipo. Con Node puoi creare un server IRC, un server di chat o, come vedremo in questa serie di tutorial, un server http. Quindi dal momento che non possiamo avere un tutorial introduttivo senza l'obbligatorio 'Ciao mondo'applicazione, inizieremo con quello.


Ciao mondo

Creiamo un nuovo file chiamato app.js. Ora Node viene fornito con una manciata di librerie per facilitare lo sviluppo di server basati su eventi. Per usare una delle librerie disponibili, devi semplicemente includere il suo modulo usando la funzione require. La funzione require restituirà un oggetto che rappresenta il modulo che ci passi sopra e puoi catturare quell'oggetto in una variabile. Ciò crea efficacemente un namespace per la funzionalità di qualsiasi modulo richiesto. Per la creazione di un server HTTP, Node fornisce la libreria http. Quindi andiamo avanti e richiedetelo ora e assegniamo l'oggetto restituito alla variabile http.

Successivamente, dovremo effettivamente creare il nostro server. La libreria http fornisce una funzione chiamata createServer che accetta una funzione di callback e restituisce un nuovo oggetto server.

La funzione di callback è ciò che Node chiama una funzione listener e viene chiamato dal server ogni volta che arriva una nuova richiesta.

Ogni volta che viene effettuata una richiesta HTTP, la funzione listener verrà richiamata e gli oggetti che rappresentano la richiesta HTTP e la risposta verranno passati alla funzione. Possiamo quindi utilizzare l'oggetto risposta all'interno della nostra funzione listener per inviare una risposta al browser. Per fare ciò, dovremo prima scrivere le intestazioni HTTP appropriate, quindi chiamiamo il writeHead funzione sul nostro oggetto di risposta.

Il writeHead la funzione richiede un paio di argomenti. Il primo è un valore intero che rappresenta il codice di stato della richiesta che per noi sarà 200, in altre parole, OK. Il secondo valore è un oggetto che contiene tutti gli header di risposta che vorremmo impostare. In questo esempio, semplicemente imposteremo il tipo di contenuto su "text / plain" per inviare il testo in chiaro.

Una volta impostate le intestazioni, possiamo inviare i dati. Per farlo, chiamerai il Scrivi funzione e passare i dati che si desidera inviare. Qui, chiamiamo il Scrivi funzione sul nostro oggetto risposta e passa nella stringa "Ciao mondo".

Per inviare effettivamente la risposta, dobbiamo segnalare al server che abbiamo finito di scrivere il corpo della nostra risposta; possiamo farlo chiamando Response.End. Il fine la funzione ci consente anche di passare i dati, in modo che possiamo ridurre il nostro codice server eliminando la chiamata alla funzione di scrittura che abbiamo creato in precedenza e passando invece la stringa "Ciao mondo"alla fine, in questo modo.

Ora che abbiamo creato il nostro server, dobbiamo configurarlo per ascoltare nuove richieste. È abbastanza facile da fare: chiamare la funzione di ascolto sul nostro oggetto server e inserire un numero di porta per l'ascolto; in questo caso userò la porta 8000. La funzione listen accetta anche un secondo parametro opzionale che è l'URL del nome host, ma dal momento che lo stiamo eseguendo solo localmente, possiamo tranquillamente saltare questo parametro per ora.

Infine, stampiamo un messaggio per farci sapere che il nostro server è in esecuzione e su quale porta sta ascoltando per nuove richieste. Puoi farlo chiamando console.log, proprio come faremmo nel browser e passando la stringa "Ascolto su http://127.0.0.1:8000"Ecco, ora eseguiamo la nostra app chiamando il nodo e passando ad esso il nome del file che vogliamo che esegua.


LA RISPOSTA

Prima di concludere questo primo articolo e video della serie, torniamo al terminale e diamo uno sguardo veloce al REPL di Node.

Un REPL, per chi non ha familiarità con l'acronimo, sta per Read-Eval-Print-Loop che non è altro che un semplice programma che accetta comandi, li valuta e stampa i risultati.

È essenzialmente un prompt interattivo che ti permette di fare praticamente tutto ciò che puoi fare con il normale Node, ma senza tutto il sovraccarico di creare un file separato, ed è fantastico per la sperimentazione, quindi giochiamo un po 'con il REPL e impariamo un un po 'di più sul nodo.

Prima dovremo interrompere la nostra applicazione server premendo Ctrl-C. Quindi eseguire nuovamente il nodo, questa volta, tuttavia, senza un nome file. L'esecuzione del nodo senza argomenti farà apparire REPL, come possiamo vedere qui dal cambiamento nel prompt. Il REPL è molto semplice: in pratica puoi scrivere codice JavaScript e vedere la valutazione di quel codice. Nonostante la sua semplicità, però, il REPL ha pochi comandi che possono tornare utili e puoi dare un'occhiata a ciascuno di questi chiamando il comando .help al prompt. Qui (fare riferimento a screencast) vediamo una lista di quattro comandi, il primo dei quali è il .rompere comando. Se stai scrivendo un codice che si estende su più righe e scopri di aver commesso qualche tipo di errore, e devi scappare per qualsiasi motivo, il .rompere il comando può essere usato per farlo. Proviamo ora?

Creerò qui una funzione e la chiamerò semplicemente foo e apri il corpo della funzione e poi colpisci accedere. Si noti che, nella riga successiva, anziché visualizzare il tipico maggiore del simbolo, ora vediamo un insieme di tre punti o un'ellissi. Questo è il modo in cui Node ci indica che non abbiamo ancora finito il comando sulla riga precedente e che il Node si aspetta ancora di più da noi prima che valuti il ​​codice che abbiamo inserito. Quindi, andiamo avanti e aggiungiamo una linea di codice ora: lo faremo console.log e stamperemo il nome della funzione. Ora premiamo invio e, di nuovo, notiamo che il carattere di ellissi viene visualizzato ancora una volta. Il nodo ci sta ancora aspettando che termineremo la funzione ad un certo punto. Ora supponiamo che ho fatto un errore e voglio solo tornare a un prompt normale. Se, continuo a premere invio, il nodo continua a visualizzare il carattere di ellissi. Ma se chiamo il .rompere comando, il nodo ci interromperà dal comando corrente e ci riporta al prompt normale.

Successivamente, abbiamo il .chiaro comando. Questo cancellerà il nostro contesto attuale. Quindi, se hai ingombrato l'ambiente con la creazione di diverse variabili e funzioni e vuoi una lavagna pulita, esegui semplicemente .chiaro comando e Voila, tutto scompare magicamente.

.Uscita e .Aiuto

Infine, c'è il .Uscita e .Aiuto comandi. Il .Aiuto il comando è abbastanza ovvio, dato che è il comando che abbiamo usato per vedere la lista dei comandi in primo luogo. Il .Uscita il comando è altrettanto ovvio: in pratica lo chiami per uscire dal REPL, in questo modo.

Quindi, questo copre praticamente tutte le funzionalità che il REPL fornisce al di fuori della valutazione del codice che inserisci. Ma prima di lasciare completamente la REPL, vorrei cogliere l'occasione per discutere alcune differenze e somiglianze tra JavaScript nel browser e il sapore di Node di JavaScript. Quindi eseguiamo di nuovo il nodo e torniamo nella REPL.

La prima differenza tra JavaScript e Node lato client è che, nel browser, qualsiasi funzione o variabile creata al di fuori di una funzione o di un oggetto è legata all'ambito globale e disponibile ovunque. In Node però, questo non è vero. Ogni file, e persino il REPL, ha il proprio ambito di livello del modulo a cui appartengono tutte le dichiarazioni globali. Vedremo questo messo in uso più avanti nella serie quando discuteremo dei moduli e ne creeremo alcuni. Ma per ora, puoi vedere l'oggetto modulo reale per il REPL digitando il modulo al prompt. Si noti che c'è un attributo prompt sepolto alcuni livelli in profondità nel nostro oggetto modulo? Questo controlla il prompt che vediamo quando è in REPL. Cambiamo solo questo in qualcosa di leggermente diverso e vediamo cosa succede. Ora abbiamo un nuovo prompt.

Un'altra differenza tra Node JavaScript e JavaScript del browser è che nel browser è presente un oggetto finestra globale che essenzialmente ti lega all'ambiente del browser.

In Node, non esiste un browser e, quindi, non esiste una cosa come a finestra oggetto. Il nodo ha tuttavia una controparte che ti collega all'ambiente operativo che è l'oggetto del processo che possiamo vedere semplicemente digitando il processo nel REPL. Qui troverai diverse funzioni e informazioni utili come l'elenco delle variabili di ambiente.

Una somiglianza che è importante menzionare qui è la funzione setTimeout. Se hai familiarità con JavaScript sul lato client, hai sicuramente usato questa funzione una o due volte. Fondamentalmente ti permette di impostare una funzione da chiamare in un secondo momento. Andiamo avanti e provalo ora.

> funzione sayHello (secondi) ? console.log ('Ciao') ;? setTimeout (function () ? console.log ('World') ;?, secondi * 1000) ;? 

Questo creerà una funzione che, una volta chiamata, stampa la stringa "Hello" e quindi alcuni secondi dopo stampa la stringa "World". Eseguiamo ora la funzione per vederla in azione.

> sayHello (2);

Ci sono un paio di idee importanti da prendere in considerazione qui. Innanzitutto, Ryan Dahl, il creatore di Node, ha fatto del suo meglio per rendere l'ambiente il più familiare possibile a chiunque abbia esperienza JavaScript sul lato client. Quindi l'uso di nomi come setTimeout e setInterval invece di dormire e ripetere, ad esempio, è stata una decisione consapevole per far corrispondere l'ambiente lato server, ovunque abbia senso, all'ambiente del browser.

Il secondo concetto di cui voglio che tu sia consapevole è davvero importante. Si noti che, quando chiamiamo di Ciao, subito dopo aver stampato la prima stringa, il controllo viene immediatamente restituito al REPL. Nel periodo tra il momento in cui viene stampata la prima stringa e eseguita la funzione di callback, è possibile continuare a fare tutto ciò che si desidera al prompt di REPL. Ciò è dovuto alla natura basata sugli eventi del nodo. Nel nodo, è quasi impossibile chiamare qualsiasi funzione che blocca per qualsiasi motivo e questo vale per la funzione setTimeout. Chiamiamo il nostro di Ciao funzione di nuovo, tuttavia, questa volta passiamo in un intervallo di timeout leggermente più lungo per darci abbastanza tempo per giocare un po 'e dimostrare il nostro punto. Credo che 10 secondi dovrebbero fare il trucco.

Lì vediamo la prima stringa. Andiamo avanti e gestiamo un codice nostro, che ne dici? 2 + 2. Grande, vediamo che la risposta è 4 e? c'è la nostra seconda stringa stampata ora.


Conclusione

Questo ci porta alla fine del primo episodio di questa serie. Spero che questa sia stata un'introduzione abbastanza informativa a Node per te, e spero di aver fatto un lavoro abbastanza decente da spiegare perché è così eccitante, cosa ha da offrire e quanto è divertente e semplice da usare. Nel prossimo episodio, inizieremo effettivamente a scrivere parte del codice per il nostro motore di blog; quindi spero che mi unirai di nuovo a me quando le cose si faranno un po 'di più. Ci vediamo!