Node.js este o nouă tehnologie uimitoare, dar, dacă nu sunteți în mod specific un dezvoltator de JavaScript, procesul de familiarizare cu acesta poate deveni rapid un pic copleșitor. Dar de asta suntem aici! Dacă dorești într-adevăr aflați cum să utilizați Node.js, acest set de articole și programe de screencast va face truc.
Bună, băieți, numele meu este Christopher Roach și voi fi ghidul dvs. pe parcursul seriei de sesiuni de pe Node.js. În această serie vom folosi Nodul pentru a crea un motor de blog simplu, precum cel realizat în popularul videoclip introductiv Ruby on Rails. Scopul acestei serii este acela de a vă oferi spectatorului un sentiment real pentru modul în care funcționează Nodul, astfel încât, chiar dacă lucrați cu oricare dintre cadrele de dezvoltare web populare, cum ar fi Express sau Getty, vă veți simți destul de confortabil funcționarea interioară a nodului, pentru a putea să coborâți în sursa sa și să efectuați modificări pentru a vă potrivi nevoilor, după cum este necesar.
Înainte de a ajunge la unele detalii despre ceea ce este Node și de ce ați dori să îl utilizați, aș vrea să continuăm și să ne începem cu instalarea Node-ului, deoarece, deși super ușor, poate dura ceva timp.
Nodul este încă foarte tânăr și se află în dezvoltare activă, deci este mai bine să instalați din sursă.
Nodul este încă foarte tânăr și se află în dezvoltare activă, deci este mai bine să instalați din sursă. Acestea fiind spuse, nodul are foarte puține dependențe, iar compilația nu este niciodată la fel de complicată ca și alte proiecte cu care s-ar fi putut lupta în trecut. Pentru a obține codul, vizitați site-ul Node.js. Dacă parcurgeți în jos pagina în secțiunea de descărcare, veți găsi câteva opțiuni. Dacă aveți instalat Git, puteți face o clonă a depozitului și puteți instala de acolo. În caz contrar, există un link către un tarball pe care îl puteți descărca în schimb. În acest videoclip, voi păstra lucrurile simple și le voi instala din tarball.
În timp ce acest lucru este descărcat, acum este un moment bun pentru a menționa că eforturile sunt în curs de desfășurare pentru a oferi un port de Node pentru Windows, și există instrucțiuni pentru instalarea pe Windows pentru Cygwin sau MinGW. Cred că există chiar și unele pachete binare de acolo pe care le puteți instala de la, dar la momentul acestei scrieri, mediul primar este platformele bazate pe Unix și Linux. Dacă sunteți pe o mașină Windows, puteți face clic pe link-ul pentru instrucțiuni de construire și urmați setul de instrucțiuni de acolo pentru o instalare Windows sau puteți instala o versiune de Linux, cum ar fi Ubuntu, și puteți instala Nod acolo.
După terminarea descărcării, pur și simplu dezarhivați și dezarhivați pachetul tar-xvf
și CD
în directorul creat. Mai întâi trebuie să facem a ./ configure
, atunci face
, și, în sfârșit face instalare
. Acest lucru va dura puțin timp pentru a construi, așa că voi lăsa să alerge în fundal și să profite de această ocazie pentru a vorbi un pic mai mult despre Node și de ce provoacă o astfel de agitație în comunitatea de dezvoltare web.
Nodul este JavaScript pe server.
Deci, dacă acest articol și video reprezintă prima dvs. introducere în Nod, probabil că vă întrebați exact ceea ce este și ceea ce face să merite să învățați atunci când există deja multe alte cadre de dezvoltare web acolo pentru a alege. Ei bine, pentru început, un motiv pe care ar trebui să-l pese este că Nodul este JavaScript pe server și să ne confruntăm, dacă lucrați pe web, îl iubești sau îl urăști, va trebui să lucrezi cu JavaScript la un moment dat . Utilizarea JavaScript ca limbaj de backend, precum și pentru partea clientului înseamnă o întreagă schimbare a contextului mai puțin pentru creier.
Oh, stiu ce te gandesti: "asa ca Node este JavaScript pe server, asta e grozav, dar au existat si alte JavaScript pe incercarile serverului din trecut, care au scazut de fapt".
Ei bine, răspunsul scurt este: Nodul este server-side JavaScript în cele din urmă făcut bine. În cazul în care alte încercări au fost în principiu porturi ale cadrelor web tradiționale MVC în limba JavaScript, Nodul este ceva complet diferit. Potrivit site-ului său, nodul este egalat I / O pentru V8 JavaScript, dar ce anume înseamnă asta? Să începem cu V8.
V8 este implementarea JavaScript super rapidă a Google, utilizată în browserul Chrome.
Printr-o aplicație cu adevărat ingenioasă a compilației "Just in Time", V8 este capabilă să realizeze viteze pentru JavaScript, care fac utilizatorii altor limbi dinamice, cum ar fi Python și Ruby, verzi cu invidie. Uitați-vă la unele dintre criteriile de referință și cred că veți fi uimiți. V8 JavaScript este acolo cu multe limbi bazate pe JVM, cum ar fi Clojure și Java și limbi compilate, cum ar fi Go în multe cazuri.
Abilitatea JavaScript de a trece prin închideri face ca programarea bazată pe evenimente să fie simplă.
Cealaltă frază cheie din acea instrucțiune este echilibrată I / O. Asta e biggie. Când vine vorba de crearea unui server web, aveți în principiu două opțiuni de făcut atunci când aveți de-a face cu mai multe solicitări de conectare concurente. Primul, care este traseul mai tradițional pe care serverele web, cum ar fi Apache, îl utilizează este să utilizeze fire pentru a gestiona cererile de conexiune primite. Cealaltă metodă, cea luată de Nod și câteva servere moderne extrem de rapide, cum ar fi Nginx și Thin, este de a folosi un singur fir fără blocare cu o buclă de evenimente. Aici este luată decizia de a utiliza JavaScript, deoarece JavaScript a fost conceput pentru a fi utilizat într-un singur mediu bazat pe buclă de evenimente: browserul. Abilitatea JavaScript de a trece prin închideri face ca programarea bazată pe evenimente să fie simplă. De fapt, trebuie doar să apelați o funcție pentru a efectua un anumit tip de I / O și să îi transmiteți o funcție de apel invers și JavaScript va crea o închidere automată, asigurându-vă că starea corectă este păstrată chiar și după ce funcția de apelare a trecut de mult. Dar asta e doar un jargon tehnic și sunt sigur că mori să vezi un cod în acțiune. Mă duc să avansez puțin până la sfârșitul acestei instalări, astfel încât să putem începe să jucăm cu noua noastră copie proaspătă a nodului.
Deci, se pare că construcția mea a terminat în cele din urmă; Vreau să verific rapid și să vă asigur că totul a mers bine cu instalarea. Pentru a face acest lucru, pur și simplu alerga nod - versiune
din linia de comandă și ar trebui să observați o indicație a faptului că executați cea mai recentă versiune a nodului care, în acest moment, este versiunea 0.4.5. Dacă vedeți o versiune tipărită, atunci puteți fi siguri că totul a mers pe jos și sunteți gata să scrieți prima aplicație Nod. Asa ca hai sa CD
înapoi în directorul nostru de acasă și de a crea un nou dosar care să țină toată munca noastră pe parcursul seriei de sesiuni de screencast. Aici o să-mi spun "blogul
'și să mergem CD
în asta pentru a începe.
Spre deosebire de alte cadre, Nodul nu este strict pentru dezvoltarea web-ului. De fapt, vă puteți gândi la Node ca un cadru pentru dezvoltarea de servere de orice fel. Cu Nodul puteți construi un server IRC, un server de chat sau, așa cum vom vedea în acest set de tutoriale, un server http. Deci, deoarece nu putem avea un tutorial introductiv fără obligatoriu "Salut Lume
", vom începe cu asta.
Să creați un nou fișier numit app.js
. Acum Nodul vine cu o mulțime de biblioteci pentru a face dezvoltarea serverelor bazate pe evenimente ușor. Pentru a utiliza una dintre bibliotecile disponibile, pur și simplu includeți modulul său folosind funcția necesită. Funcția necesită va returna un obiect care reprezintă modulul pe care îl transmiteți și îl puteți capta într-o variabilă. Acest lucru creează în mod eficient un spațiu de nume pentru funcționalitatea oricăror module necesare. Pentru crearea unui server HTTP, Node furnizează biblioteca http. Deci, să mergem mai departe și să cerem acum și să alocăm obiectul returnat la variabila http.
Apoi, va trebui să creați serverul nostru. Biblioteca http oferă o funcție numită createServer
care are o funcție de apel invers și returnează un obiect de server nou.
Funcția de apel invers este ceea ce Node apelează o funcție de ascultător și este apelată de server ori de câte ori o nouă solicitare intră.
Ori de câte ori se face o solicitare HTTP, se va apela funcția de ascultător și vor fi transmise în funcție funcțiile care reprezintă cererea și răspunsul HTTP. Apoi, putem folosi obiectul de răspuns din interiorul funcției ascultătorului pentru a trimite un răspuns înapoi la browser. Pentru a face acest lucru, va trebui mai întâi să scrieți antetele HTTP adecvate, așa că sunați la writeHead
funcție pe obiectul nostru de răspuns.
writeHead
funcția are câteva argumente. Prima este o valoare întregă reprezentând codul de stare al solicitării, care pentru noi va fi 200, cu alte cuvinte, OK. A doua valoare este un obiect care conține toate anteturile de răspuns pe care dorim să le setăm. În acest exemplu, pur și simplu vom seta tipul de conținut la "text / simplu" pentru a trimite înapoi text simplu.
După ce am setat anteturile, putem trimite datele. Pentru a face acest lucru, veți apela scrie
și transmiteți datele pe care doriți să le trimiteți. Aici, să sunăm scrie
funcția pe obiectul nostru de răspuns și treci în șirul "Salut Lume
".
Pentru a trimite răspunsul, trebuie să semnalăm serverului că am terminat scrierea corpului răspunsului nostru; putem face asta prin chemare response.end
. Sfârșit
funcția ne permite de asemenea să trecem și în date, astfel încât să putem scurta codul nostru de server prin eliminarea apelului la funcția de scriere pe care am făcut-o mai devreme și în schimb, trecerea în șirul "Salut Lume
"la funcția de sfârșit, ca atare.
Acum că am creat serverul nostru, trebuie să-l setăm pentru a asculta noi cereri. Este destul de ușor de făcut: apelați funcția de ascultare pe obiectul serverului și introduceți un număr de port pentru ca acesta să asculte; în acest caz voi folosi portul 8000
. Funcția de ascultare are, de asemenea, un al doilea parametru opțional, care este adresa URL a gazdei, dar din moment ce rulați acest lucru pe plan local, putem trece peste acest parametru în siguranță.
În cele din urmă, să tipărim un mesaj care să ne comunice că serverul nostru rulează și pe ce port ascultă pentru cereri noi. Puteți face asta prin apelare console.log
, la fel ca în browser, și trecerea în șirul "Ascultați pe http://127.0.0.1:8000
"Acolo mergem, acum să ne executăm aplicația apelând nodul și trecând la el numele fișierului pe care dorim să-l execute.
Înainte de a aduce acest prim articol și filmul din seria la final, hai să ne întoarcem la terminal și să aruncăm o privire rapidă la NPL's REPL.
Un REPL, pentru cei necunoscuți cu acronimul, înseamnă Read-Eval-Print-Loop, care nu este altceva decât un program simplu care acceptă comenzi, le evaluează și le imprimă rezultatele.
Este, în esență, un prompt interactiv care vă permite să faceți tot ceea ce puteți face cu Nodul obișnuit, dar fără toate cheltuielile aferente creării unui fișier separat și este excelent pentru experimentare, deci să jucăm în jur cu REPL și să învățăm mai mult despre Nod.
Mai întâi trebuie să oprim aplicația noastră de server prin lovire Ctrl-C
. Apoi rulați din nou nodul, de data aceasta însă, fără un nume de fișier. Rularea nodului fără argumente va aduce REPL, așa cum se poate vedea aici prin schimbarea promptului. REPL este foarte simplu: practic puteți scrie cod JavaScript și a vedea evaluarea acelui cod. În ciuda simplității sale, REPL are puține comenzi care pot veni la îndemână și puteți să aruncați o privire la fiecare dintre acestea prin apelarea comenzii .help la prompt. Aici găsiți o listă cu patru comenzi, dintre care primul este .pauză
comanda. Dacă scrieți un cod care cuprinde mai multe linii și veți constata că ați făcut ceva greșeală și trebuie să izbucnete din orice motiv, .pauză
poate fi folosit pentru a face acest lucru. Să încercăm acum?
Voi crea o funcție aici și o voi numi foo
și deschideți corpul funcției și apoi loviți introduce
. Observați că, pe linia următoare, mai degrabă decât să vedem simbolul tipic mai mare decât simbolul, vedem acum un set de trei puncte sau o elipsă. Aceasta este modalitatea Node de a ne indica faptul că nu am terminat încă comanda pe linia anterioară și că Nodul încă așteaptă mai mult de la noi înainte de a evalua codul pe care l-am scris. Deci, hai să mergem mai departe și să adăugăm o linie de cod acum: vom face console.log
și vom tipări numele funcției. Hai să intrăm acum la intrare și, din nou, observați că caracterul de elipsă este afișat încă o dată. Nodul ne așteaptă încă să terminăm funcția la un moment dat. Acum să presupunem că am făcut o greșeală și vreau doar să mă întorc la un prompt normal. Dacă, continuă să apăs pe Enter, nodul continuă să afișeze caracterul de elipsă. Dar, dacă îl sun .pauză
comandă, Nodul ne va rupe din comanda curentă și ne va readuce la promptul normal.
Apoi, avem .clar
comanda. Acesta va clarifica contextul nostru actual. Deci, dacă ați aglomerat mediul înconjurător prin crearea mai multor variabile și funcții și doriți o ardezie curată, pur și simplu rulați .clar
comandă și Voila, totul dispare în mod magic.
.Ieșire
și .Ajutor
În cele din urmă, există .Ieșire
și .Ajutor
comenzi. .Ajutor
este destul de evidentă, deoarece este comanda pe care am folosit-o pentru a vedea lista de comenzi în primul rând. .Ieșire
comanda este la fel de evidentă: în esență, doar o numiți pentru a ieși din REPL, așa cum este.
Deci, aceasta acoperă destul de mult toată funcționalitatea oferită de REPL în afara evaluării codului pe care îl introduceți. Dar, înainte de a părăsi complet REPL, aș dori să profit de această ocazie pentru a discuta despre unele diferențe și asemănări între JavaScript în browser și aroma Nodului de JavaScript. Deci, să conducem din nou Node și să revenim în REPL.
Prima diferență dintre JavaScript și Nodul de pe partea clientului este că, în browser, orice funcție sau variabilă creată în afara unei funcții sau a unui obiect este legată de domeniul global și disponibilă peste tot. În Nod, totuși, acest lucru nu este adevărat. Fiecare fișier, și chiar REPL, are propriul său domeniu de nivel de modul la care fac parte toate declarațiile globale. Vom vedea că acest lucru va fi folosit mai târziu în serie atunci când discutăm module și creăm câteva din noi. Dar pentru moment, puteți vedea obiectul modulului real pentru REPL prin tastarea modulului la prompt. Observați că există un atribut prompt îngropat în câteva niveluri adânc în obiectul modulului nostru? Acest lucru controlează promptul pe care îl vedem în REPL. Hai să schimbăm acest lucru la ceva ușor diferit și să vedem ce se întâmplă. Acum, avem un nou prompt.
O altă diferență între Node JavaScript și browser-ul JavaScript este că în browser aveți un obiect global de ferestre care vă conectează în esență la mediul browserului.
În Nod, nu există niciun browser și, prin urmare, nici un astfel de lucru ca a fereastră
obiect. Nodul are totuși o contrapartidă care vă atrage în mediul de operare care este obiectul de proces pe care îl putem vedea prin simpla introducere a procesului în REPL. Aici veți găsi câteva funcții și informații utile, cum ar fi lista variabilelor de mediu.
O asemănare importantă de menționat aici este funcția setTimeout. Dacă sunteți familiarizat cu JavaScript de pe partea clientului, ați folosit fără îndoială această funcție o oră sau două. În principiu, permiteți-vă să configurați o funcție care să fie apelată ulterior. Să mergem mai departe și să încercăm acum.
> funcția spuneHello (secunde) ? console.log ("Buna ziua"); setTimeout (funcția () ? console.log ('Lumea') ;?, secunde * 1000) ;?
Aceasta va crea o funcție care, atunci când este apelată, imprimă șirul "Hello" și apoi câteva secunde mai târziu imprimă șirul "Lumea". Să executăm acum funcția pentru ao vedea în acțiune.
> spuneHello (2);
Există câteva idei importante care trebuie luate în considerare aici. În primul rând, Ryan Dahl, creatorul Node, a făcut tot ce-i stă în putință pentru a face ca mediul să fie cât se poate de familiar cu orice persoană cu experiență JavaScript de pe partea clientului. Deci, utilizarea de nume, cum ar fi setTimeout
și setInterval mai degrabă decât de somn și repeta, de exemplu, a fost o decizie conștientă de a face mediul de server de mediu meci, ori de câte ori are sens, mediul de browser.
Cel de-al doilea concept pe care vreau să-l cunoașteți este unul foarte important. Observați că, când sunăm spune buna
, imediat după imprimarea primului șir, controlul este imediat dat înapoi la REPL. În intervalul dintre momentul când este imprimat primul șir și funcția de apel invers, puteți continua să faceți tot ce doriți la solicitarea REPL. Aceasta se datorează naturii bazate pe eveniment a nodului. În Nod, este aproape imposibil să apelați orice funcție care blochează din orice motiv și acest lucru este valabil pentru funcția setTimeout. Să ne sunăm spune buna
funcționează din nou, totuși, de această dată, să trecem într-un interval de timp prea scurt, pentru a ne oferi suficient timp pentru a juca în jur și pentru a ne dovedi punctul nostru de vedere. Cred că 10 secunde ar trebui să facă truc.
Acolo vedem primul șir. Să mergem mai departe și să vedem un cod al nostru, ce zici 2 + 2
. Mare, vedem că răspunsul este 4
și? este al doilea șir de caractere imprimat acum.
Așa că ne aduce la sfârșitul primului episod din această serie. Sper că aceasta a fost o introducere destul de informativă la Node pentru dvs. și sper că am făcut o treabă destul de decentă de a explica de ce este atât de interesantă, de ce are de oferit și cât de distractivă și de simplă este să o utilizați. În următorul episod, vom începe să scriem o parte din codul motorului nostru de blog; așa că sper că veți veni cu toții din nou atunci când lucrurile vor avea mai multe mâini. Ne vedem atunci!