Node.js pentru începători

Event-driven de programare poate fi copleșitoare pentru începători, ceea ce poate face Node.js dificil de a începe cu. Dar nu te lasa sa te descurajezi; În acest articol, vă voi învăța câteva dintre elementele de bază ale Node.js și explicați de ce a devenit atât de popular.

Dacă aveți nevoie de ajutor, puteți contacta oricând unul dintre experții JavaScript pe Envato Studio. Indiferent dacă aveți nevoie de un bug fix sau de o funcție nouă adăugată, veți găsi un dezvoltator JavaScript cu experiență care să vă ajute.

Aflați JavaScript: Ghidul complet

Am creat un ghid complet care vă ajută să învățați JavaScript, indiferent dacă începeți doar ca dezvoltator web sau doriți să explorați subiecte mai avansate.

Introducere

Pentru a începe să utilizați Node.js, trebuie mai întâi să înțelegeți diferențele dintre mediile Node.js și mediile tradiționale de scripting (de exemplu: PHP, Python, Ruby etc.).

Programare asincronă

Node.js utilizează o arhitectură a modulelor pentru a simplifica crearea de aplicații complexe.

Șansele sunt bune că sunteți familiarizați cu programarea asincronă; este, la urma urmei, "A" în Ajax. Fiecare funcție din Node.js este asincronă. Prin urmare, tot ceea ce ar bloca în mod normal firul este în schimb executat în fundal. Acesta este cel mai important lucru de reținut despre Node.js. De exemplu, dacă citiți un fișier în sistemul de fișiere, trebuie să specificați o funcție de retur care se execută când operația de citire a fost terminată.

Tu faci totul!

Node.js este doar un mediu - ceea ce înseamnă că trebuie să faceți totul singur. Nu există un server HTTP implicit sau niciun server pentru asta. Acest lucru poate fi copleșitor pentru utilizatorii noi, dar plata este o aplicație web de înaltă performanță. Un script gestionează toate comunicările cu clienții. Acest lucru reduce considerabil numărul de resurse utilizate de aplicație. De exemplu, aici este codul pentru o aplicație Node.js simplă:

var i, a, b, c, max; max = 1000000000; var d = Date.now (); pentru (i = 0; i < max; i++)  a = 1234 + 5678 + i; b = 1234 * 5678 + i; c = 1234 / 2 + i;  console.log(Date.now() - d);

Și aici este echivalentul scris în PHP:

$ a = null; $ b = null; $ c = null; $ i = null; $ max = 1000000000; $ start = microtime (adevărat); pentru ($ i = 0; $ i < $max; $i++)  $a = 1234 + 5678 + $i; $b = 1234 * 5678 + $i; $c = 1234 / 2 + $i;  var_dump(microtime(true) - $start);

Acum, să ne uităm la numerele de referință. Următorul tabel afișează timpii de răspuns, în milisecunde, pentru aceste două aplicații simple:

Număr de iterații Node.js PHP
100 2,00 0,14
10'000 3,00 10.53
1.000.000 15.00 1119.24
10'000'000 143.00 10621.46
1'000'000'000 11118.00 1036272.19

Am executat cele două aplicații din linia de comandă, astfel încât niciun server să nu întârzie executarea aplicațiilor. Am executat fiecare test de zece ori și am măsurat rezultatele. PHP este în mod semnificativ mai rapid, cu o cantitate mai mică de iterații, dar acest avantaj se dizolvă rapid pe măsură ce numărul iterațiilor crește. Când totul este spus și terminat, PHP este cu 93% mai lent decât Node.js!

Node.js este rapid, dar va trebui să înveți câteva lucruri pentru ao folosi în mod corespunzător.

module

Node.js utilizează o arhitectură a modulelor pentru a simplifica crearea de aplicații complexe. Modulele sunt asemănătoare bibliotecilor din C sau unităților din Pascal. Fiecare modul conține un set de funcții legate de "subiectul" modulului. De exemplu, http modulul conține funcții specifice HTTP. Node.js oferă câteva module de bază din cutie pentru a vă ajuta să accesați fișierele din sistemul de fișiere, să creați servere HTTP și TCP / UDP și să efectuați alte funcții utile.

Includerea unui modul este ușoară; pur și simplu apelarea require () funcționează astfel:

var http = necesită ("http");

Node.js este doar un mediu; trebuie să faci totul singur.

require () funcția returnează referința la modulul specificat. În cazul acestui cod, o trimitere la http modulul este stocat în http variabil.

În codul de mai sus, am trecut numele unui modul la require () funcţie. Acest lucru determină Nodul să caute a node_modules folder în directorul aplicației noastre și căutați http modul în acel dosar. Dacă nodul nu găsește node_modules folder (sau http modul în care se află), apoi analizează cache-ul global al modulelor. De asemenea, puteți specifica un fișier real trecând o cale relativă sau absolută, cum ar fi:

var myModule = cer ('./ myModule.js');

Modulele sunt bucăți de cod încapsulate. Codul din cadrul unui modul este în mare parte privat - ceea ce înseamnă că funcțiile și variabilele definite în ele sunt accesibile numai din interiorul modulului. Cu toate acestea, puteți expune funcțiile și / sau variabilele care trebuie utilizate în afara modulului. Pentru a face acest lucru, utilizați exporturi obiect și să-i populeze proprietățile și metodele cu piesele de cod pe care doriți să le expuneți. Luați în considerare următorul modul ca exemplu:

var PI = Math.PI; exports.area = funcția (r) retur PI * r * r; ; exports.circumference = funcție (r) return 2 * PI * r; ;

Acest cod creează o PI variabilă care poate fi accesată numai prin codul conținut în modul; acesta nu este accesibil în afara modulului. Apoi, două funcții sunt create pe exporturi obiect. Aceste funcții sunt accesibile în afara modulului, deoarece sunt definite pe exporturi obiect. Ca rezultat, PI este complet protejat de interferențele din exterior. Prin urmare, puteți fi siguri că zonă() și circumferinţă() se vor comporta mereu așa cum ar trebui (atâta timp cât o valoare este furnizată pentru r parametru).

Domeniul global de aplicare

Nodul este un mediu JavaScript care rulează în motorul JavaScript V8 Google. Ca atare, ar trebui să urmăm cele mai bune practici pe care le folosim pentru dezvoltarea clientului. De exemplu, ar trebui să evităm orice altceva în sfera globală. Aceasta, totuși, nu este întotdeauna posibilă. Domeniul de aplicare global în Nod este GLOBAL (spre deosebire de fereastră în browser) și puteți crea cu ușurință o variabilă globală a funcției prin omiterea var cuvânt cheie, după cum urmează:

globalVariable = 1; globalfuncțional = funcția () ...;

Încă o dată, globalele ar trebui evitate ori de câte ori este posibil. Așa că fiți atenți și amintiți-vă să utilizați var când se declară o variabilă.

Instalare

Firește, trebuie să instalăm un nod înainte de a putea scrie și executa o aplicație. Instalarea este directă, dacă utilizați Windows sau OS X; site-ul nodejs.org oferă instalatori pentru aceste sisteme de operare. Pentru Linux, utilizați orice manager de pachete. Deschideți terminalul și tastați:

sudo apt-get actualizare sudo apt-get nod de instalare

sau:

sudo aptitude actualizare sudo aptitude nod instalare

Node.js se află în depozitele sid; este posibil să fie necesar să le adăugați în lista de surse:

sudo ecou deb http://ftp.us.debian.org/debian/ sid main> /etc/apt/sources.list.d/sid.list

Dar trebuie să fiți conștient de faptul că instalarea pachetelor sid pe sistemele mai vechi poate duce la ruperea sistemului. Fiți atenți și eliminați /etc/apt/sources.list.d/sid.list după ce terminați instalarea nodului.

Instalarea de module noi

Node.js are un manager de pachete numit Node Package Manager (NPM). Este instalat automat cu Node.js și utilizați NPM pentru a instala module noi. Pentru a instala un modul, deschideți terminalul / linia de comandă, navigați la dosarul dorit și executați următoarea comandă:

npm instalează modul_name

Nu contează ce OS aveți; comanda de mai sus va instala modulul specificat în locul lui module_name.

Aplicația Hello World

Firește, primul nostru script Node.js va tipări textul 'Salut Lume!' la consola. Creați un fișier, numit hello.js, și introduceți următorul cod:

console.log ("Hello World!");

Acum, să executăm scenariul. Deschideți terminalul / linia de comandă, navigați la folderul care conține hello.js, și executați următoarea comandă:

nodul hello.js

Ar trebui sa vezi 'Salut Lume!' afișat în consola.

Server HTTP

Să trecem la o aplicație mai avansată; nu este atât de complicat cum crezi. Să începem cu următorul cod. Citiți comentariile și explicația de mai jos:

// Include modulul http. var http = necesită ("http"); // Creați serverul. Funcția trecută ca parametru este apelată la fiecare solicitare făcută. // variabila de cerere deține toți parametrii de solicitare // variabila de răspuns vă permite să faceți orice răspuns cu clientul trimis. http.createServer (funcția (cerere, răspuns) // Atașați ascultător la evenimentul final. // Acest eveniment este apelat atunci când clientul trimite toate datele și așteaptă răspunsul request.on ("end", function () // Scrieți anteturile răspunsului // 200 este codul de stare HTTP (acest lucru înseamnă succes) // Parametrul al doilea conține câmpurile antetului în obiect // Trimitem text simplu, astfel încât Content-Type să fie text / plain response.writeHead (200 , 'Content-Type': 'text / plain'); // Trimite date și răspuns final. (8080);

Acest cod este foarte simplu. Puteți trimite clientului mai multe date utilizând Response.Write () dar trebuie să o apelați înainte de a apela response.end (). Salvați acest cod ca http.js și tastați-l în consola dvs.:

nod http.js

Deschideți browserul dvs. și navigați la http: // localhost: 8080. Ar trebui să vedeți textul "Hello HTTP!" în pagină.

Manipularea parametrilor adresei URL

După cum am menționat mai devreme, trebuie să facem totul în Nod, inclusiv argumentele de parsare a cererii. Acest lucru este, totuși, destul de simplu. Uitați-vă la următorul cod:

// Include modulul http, var http = require ("http"), // Și modulul url, care este foarte util în parsarea parametrilor solicitării. url = necesită ("url"); // Creați serverul. http.createServer (functie (cerere, raspuns) // Atacati ascultatorul la evenimentul final. request.on ('end', function () // Parsa cererea pentru argumente si pastrati-le in variabila _get. adresa url de la cerere și returnează reprezentarea obiectului var _get = url.parse (request.url, true) .query; // Scrieți anteturile răspunsului.response.writeHead (200, 'Content-Type': 'text / plain '); // Trimiteți date și răspunsul final.response.end (' Aici sunt datele dvs.: '+ _get [' date ']);)); // Ascultă pe portul 8080.) ;

Acest cod folosește analiza() metodă a URL-ul modul, un modul Node.js de bază, pentru a converti adresa URL a solicitării la un obiect. Obiectul returnat are a întrebare proprietate, care preia parametrii adresei URL. Salvați acest fișier ca get.js și executați-o cu următoarea comandă:

nodul get.js

Apoi, navigați la http: // localhost: 8080 / date = put_some_text_here în browserul dvs. În mod firesc, schimbarea valorii date parametrul nu va rupe scriptul.

Citirea și scrierea fișierelor

Pentru a gestiona fișierele în Nod, folosim fs modul (un modul de bază). Citeste si scriem fisiere folosind fs.readFile () și fs.writeFile () metode, respectiv. Voi explica argumentele după următorul cod:

// Include modul http, var http = require ("http"), // Și modulul mysql pe care tocmai l-ai instalat. fs = necesită ("fs"); // Creați serverul http. http.createServer (funcția (cerere, răspuns) // atașați ascultător la sfârșitul evenimentului request.on ("end", funcția () // citiți fișierul fs.readFile ("test.txt" 8 ', funcția (eroare, date) // Scrieți anteturile answer.writeHead (200, ' Content-Type ':' text / plain ')) ) + 1; // Scrieti numarul incremental la fisierul fs.writeFile ('test.txt', data); / / Terminati raspunsul cu un mesaj frumos reply.end ('Aceasta pagina a fost actualizata' + data + 'ori! '););); // Ascultă pe portul 8080.) ascultați (8080);

Node.js are un manager de pachete numit Node Package Manager (NPM). Se instalează automat cu Node.js

Salvați ca files.js. Înainte de a rula acest script, creați un fișier numit test.txt în același director ca files.js.

Acest cod demonstrează fs.readFile () și fs.writeFile () metode. De fiecare dată când serverul primește o solicitare, scriptul citește un număr din fișier, incrementează numărul și scrie noul număr în fișier. fs.readFile () metoda acceptă trei argumente: numele fișierului de citit, codificarea așteptată și funcția de apel invers.

Scrierea în dosar, cel puțin în acest caz, este mult mai simplă. Nu trebuie să așteptăm rezultate, deși ați verifica dacă există erori într-o aplicație reală. fs.writeFile () metoda acceptă numele de fișier și datele ca argumente. De asemenea, acceptă al treilea și al patrulea argument (ambele sunt opționale) pentru a specifica funcția de codare și apel invers.

Acum, să rulați acest script cu următoarea comandă:

nod files.js

Deschideți-o în browser (http: // localhost: 8080) și o reîmprospătați de câteva ori. Acum, ați putea crede că există o eroare în cod, deoarece pare să crească cu două. Aceasta nu este o eroare. De fiecare dată când solicitați această adresă URL, două solicitări sunt trimise la server. Prima solicitare se face automat de către browser, care solicită favicon.ico, și, desigur, a doua solicitare este pentru adresa URL (http: // localhost: 8080).

Chiar dacă acest comportament nu este tehnic o eroare, este un comportament pe care nu-l dorim. Putem rezolva acest lucru ușor prin verificarea adresei URL a solicitării. Iată codul revizuit:

// Include modul http, var http = require ("http"), // Și modulul mysql pe care tocmai l-ai instalat. fs = necesită ("fs"); // Creați serverul http. http.createServer (functie (cerere, raspuns) // Atacati ascultator la evenimentul final. request.on ('end', function () // Verificati daca cererile utilizatorului / if (request.url == '/' // Citiți fișierul.fs.readFile ('test.txt', 'utf-8', funcția (eroare, date) // Scriere anteturi.respons.writeHead (200, 'Content-Type' (data) + 1; // scrie numărul incrementat la fișier; fs.writeFile ('test.txt', date); / / Termină răspunsul cu unele ('Aceasta pagina a fost actualizata' + data + 'times!');); altceva // Indicati ca fisierul solicitat nu a fost gasit. reply.writeHead (404); fără a trimite date.respons.end ();); // Ascultați pe portul 8080.) ascultați (8080);

Testați-l acum; ar trebui să funcționeze conform așteptărilor.

Accesarea bazelor de date MySQL

Majoritatea tehnologiilor tradiționale de pe server au un mijloc de conectare și interogare a unei baze de date. Cu Node.js, trebuie să instalați o bibliotecă. Pentru acest tutorial, am selectat stabil și ușor de utilizat nod-mysql. Numele complet al acestui modul este [email protected] (totul după @ este numărul versiunii). Deschideți consola, navigați la directorul în care ați stocat scripturile și executați următoarea comandă:

npm instalează [email protected]

Descărcă și instalează modulul și creează și node_modules folder din directorul curent. Acum, să ne uităm la modul în care putem folosi acest lucru în codul nostru; consultați următorul exemplu:

// Include modulul http, var http = require ('http'), // Și modulul mysql pe care tocmai l-ați instalat. mysql = necesită ("mysql"); // Creați conexiunea. // Datele sunt implicite pentru noua instalare mysql și ar trebui să fie modificate în funcție de configurația dvs. var conexiune = mysql.createConnection (utilizator: "root", parola: "", baza de date: "db_name"); // Creați serverul http. http.createServer (functie (cerere, raspuns) // atasarea ascultatorului la evenimentul final. request.on ('end', function () // interogare database.connection.query ('SELECT * FROM your_table; (eroare, rânduri, câmpuri) response.writeHead (200, 'Content-Type': 'x-application / json'); answer.end (JSON.stringify (rows)););); // Ascultă pe portul 8080.) ascultați (8080);

Interogarea bazei de date cu această bibliotecă este ușoară; pur și simplu introduceți șirul de interogare și funcția de apel invers. Într-o aplicație reală, ar trebui să verificați dacă au existat erori ( eroare parametrul nu va fi nedefinit dacă s-au produs erori) și să trimiteți coduri de răspuns în funcție de succesul sau eșecul interogării. De asemenea, rețineți că am setat Tipul de conținut la x-application / json, care este tipul valid MIME pentru JSON. rânduri parametrul conține rezultatul interogării și pur și simplu transformăm datele în rânduri la o structură JSON folosind JSON.stringify () metodă.

Salvați acest fișier ca mysql.js, și executați-o (dacă aveți instalat MySQL, care este):

nodul mysql.js

Navigheaza catre http: // localhost: 8080 în browserul dvs. și vi se recomandă să descărcați fișierul formatat în JSON.

Concluzie

Fiecare funcție din Node.js este asincronă.

Node.js necesită o muncă suplimentară, însă merită să fie plătită o aplicație rapidă și robustă. Dacă nu doriți să faceți totul la cel mai scăzut nivel, puteți alege oricând un cadru, cum ar fi> Express, pentru a facilita dezvoltarea aplicațiilor.

Node.js este o tehnologie promitatoare si o alegere excelenta pentru o aplicatie cu sarcina mare. A fost dovedită de corporații, cum ar fi Microsoft, eBay și Yahoo. Dacă nu sunteți sigur că vă găzduiți site-ul / aplicația, puteți utiliza întotdeauna o soluție VPS ieftină sau diverse servicii bazate pe cloud, cum ar fi Microsoft Azure și Amazon EC2. Ambele servicii oferă medii scalabile la un preț rezonabil.

Nu uitați să comentați dacă aveți întrebări!

Cod