Cauta rapid aici ↑

Introducere in Nodejs

Nodejs scurt istoric

Nodejs este JavaScript ce ruleaza pe partea de server si a fost creat de Ryan Dahl si de alti programatorii in 2009 pe cand lucrau la compania Joyent. In 2011 a fost lansat NPM (Node Package Manager) cu scopul de a facilita instalarea modulelor JavaScript create de catre comunitatea Nodejs. Pe masura ce comunitatea Nodejs a devenit tot mai numeroasa au aparut diferite conflicte legate de modul de gestionare al viitoarelor versiuni ale Nodejs.

Utilizatorii doreau ca viitoarele versiuni sa fie gestionate de catre comunitatea Nodejs si nu de vre-o anumita corporatie. S-a dorit sa se poata implementa in limbajul Nodejs (JavaScript server side) noile caracteristici si noile API-uri intr-un mod cat mai usor si simplu de inteles. In Februarie 2015 a fost anuntat crearea unei fundati neutre Nodejs iar aceasta a prins viata patru luni mai tarziu in luna Iunie. Aceasta fundatie neutra Nodejs are ca membri componenti mai multe companii mari. Companii precum IBM, Microsoft, PayPal, Groupon si Joyent fac parte din aceasta fundatie neutra.

In data de 14 Septembrie 2015 a fost lansat versiunea Nodejs 4.0 si are implementat mai multe caracteristici ale versiunii JavaScript 6 sau ECMAScript 6 pe care le putem folosi mai mult sau mai putin in script-urile noastre.

Cum functioneaza Nodejs

Nodejs este setat sa ruleze asincron si va putea rula sincron numai in situatia in care script-urile noastre vor dori asta. Nodejs functioneaza asincron cu scopul de a oferi un timp de raspuns cat mai rapid indiferent de cate evenimente sunt declansate. Este foarte important sa avem grija ca intreg script-ul nostru sa ruleze asincron si sa nu rulam o functie sau o metoda in mod sincron decat in situatia in care nu avem alternativa, dar si in acest caz trebuie sa stim exact ce facem.

Instalare Nodejs

Nodejs este un program (soft) care interpreteaza limbajul JavaScript si se poate instala foarte usor pe platforma Windows sau pe ce platforma aveti. Primul lucru pe care trebuie sa il faceti este sa mergeti pe site-ul lor oficial si sa il descarcati gratuit de la ei de la acest url. https://nodejs.org/en/

Nodejs se instaleaza aproape la fel ca orice program iar setarile de baza sunt de cele mai multe ori suficiente. Imediat ce am instalat Nodejs urmatorul pas este sa cautam in meniul START din Windows (sau echivalent pe alta platforma) Nodejs command prompt. Vom da click stanga pe iconita si Nodejs se va deschide imediat sub forma unei ferestre command prompt.

Nodejs command prompt

Asa cum spuneam mai sus, Nodejs este JavaScript ce ruleaza pe partea de server si pentru a putea executa o linie de cod sau un intreg program va trebui sa deschidem mai intai Nodejs command prompt. Imediat ce l-am deschis va trebui sa scriem in acesta doar cuvantul node si apasam tasta ENTER. In acest fel vom intra in istanta node.

Imediat ne vor fi afisate pe urmatoarea linie semnul mai mare sau mai mic urmat de un mic dreptunghi pe orizontala care apare si dispare la intervale scurte. In acest moment putem scrie script-urile noastre pe o singura linie fara a apasa tasta ENTER. In momentul in care apasam tasta ENTER vom declansa executarea scriptului nostru.

Pentru a salva comenzile sau liniile noastre de cod JavaScript si sa nu le pierdem prin iesirea din mod node va trebui sa scriem .save numefisier.js si sa apasati tasta ENTER iar Nodejs ne va creea un fisier JavaScript cu numele pe care i l-am dat ce va contine liniile de cod inserate anterior. Fisierul va fi salvat in directorul in care suntem in mod node. Daca vreti sa vedeti mai multe comenzi tot in mod node, atunci va trebui sa scrieti comanda .help si sa apasati tasta ENTER.

Dupa ce am testat putin Nodejs command prompt putem iesi din Node apasand de doua ori Ctrl + C. Retineti aceasta ultima comanda pentru ca o vom folosi ori de cate ori vom dori sa oprim un server in Nodejs sau sa renuntam la executarea Nodejs.

Lucrul in Nodejs command prompt necesita cunostinte de navigare intre directoare din command prompt iar cea mai des intalnita comanda este cd desktop. In acest moment am ajuns pe desktop navigand din folderul default ce contine numele calculatorului (in cazul meu Vali) din C:\Users\Vali> in C:\Users\Vali\Desktop>. Daca vom folosi comanda dir, in terminal ne vor fi afisate intreg continutul desktop-ului iar comanda cls ne va curata terminalul de toate informatiile afisate.

Comanda d: ne va duce terminalul in partitia D si de cele mai multe ori aceasta va functiona indiferent de locul in care ne aflam, din orice director in care suntem. Comanda mkdir ne va creea un director in locul in care ne aflam in acel moment in sistemul de operare.

Acestea sunt cele mai frecvente comenzi pe care le vom folosi pe platforma Windows si trebuie sa le retineti in cazul in care nu le-ati stiut pana acum. Mai multe comenzi despre lucrul in command prompt le puteti gasi facand o mica cautare pe Google.

Obiectul global

Daca esti obijnuit sa scrii JavaScript pentru browser (client side) atunci sigur ai auzit de obiectul window si ca acesta reprezinta fereastra browser-ului cu tot cu metode si proprietatii ale acestuia. In browser-ul Chrome, in consola acestuia putem scrie cuvantul window si apoi apasam tasta ENTER. In urmatoarea secunda browser-ul ne va afisa toate metodele si proprietatile obiectului window in consola browser-ului. In acest mod putem verifica daca sunt implementate diferite API-uri si sa le folosim dupa plac dar si in acelasi timp sa vedem structura obiectelor copil, descoperind in acest mod numele metodelor si proprietatilor ale acestuia.

In Nodejs nu avem obiectul window pentru ca nu avem browser. Nodejs este JavaScript pe partea de server (server side). Echivalentul obiectului window in Nodejs este obiectul global. Obiectul global contine toate metodele si proprietatile predefinite ale Nodejs. Obiectul global nu este foarte stufos si este relativ simplu sa il parcurgi.

Nodejs command prompt reprezinta locul unde ne vor fi afisate diferite string-uri pe care ni le-am setat in script sau diferite erori care apar in momentul cand Nodejs ruleaza un program facut de noi. In cea mai mare parte este echivalentul consolei browser-ului.

Pentru a vedea intreaga structura a obiectului global va trebui sa deschidem Nodejs command prompt si sa inseram mai intai doar cuvantul node si apoi apasam tasta ENTER si apoi scriem doar cuvantul global si apoi apasam tasta ENTER.

In urmatoarea secunda ne vor fi afisate in Nodejs command prompt intreaga structura a obiectului global. Intreaga structura a obiectului global o putem vedea si la acest url https://nodejs.org/api/globals.html, url in care ne sunt explicate pe scurt diferite metode si proprietii. La urmatorul url avem pagina principala a documentatiei despre Nodejs https://nodejs.org/api/documentation.html pe care v-o recomand s-o parcurgeti.

Obiectul global are in componenta lui cateva module si obiecte copil pe care le vom folosi din plin in script-urile noastre. Obiecte precum console, fs, http, process si path sunt doar cateva pe care le vom folosi sa afisam diferite date in consola, sa lucram cu fisiere si directoare, sa cream server http, sa culegem diferite date despre script-ul nostru in timp ce acesta ruleaza si in cele din urma sa aflam calea catre un anume fisier.

Nodejs Closure

JavaScript Closure reprezinta abilitatea functiilor de a stoca in mediul lor variabile si functii copil valabile doar in acest mediu. In Nodejs notiunea de closure este dusa putin mai departe iar orice script pe care in cream intr-un fisier ce contine variabile si functii vor fi accesibile doar in cadrul acestui fisier. Acest fisier mai poarta denumirea si de modul Nodejs. Pentru a putea accesa o variabila ori o functie dintr-un modul Nodejs intr-un alt modul Nodejs va trebui mai intai sa exportam ce vrem sa accesam in alt modul. Modalitatea prin care putem face acest lucru este reprezentata de urmatoarea linie de cod: module.exports = numeFunctie / numeVariabila si este indicat sa o adaugam la sfarsitul script-ului respectiv din acel fisier modul. In modulul in care vrem sa importam respectiva functie sau variabila va trebui sa ne folosim de metoda require() ce va avea ca parametru un string ce va contine calea relativa catre acel fisier modul. Este foarte important sa declarati importul respectiv intr-o variabila, exact ca in exemplul urmator. var script = require('module/nume-fisier');. Observati ca nu am mai pus si extensia fisierului pentru ca aceasta este optionala, Nodejs presupune ca extensia fisierului este logic .js.

Rularea unui script dintr-un fisier din command prompt

Rularea unui script dintr-un fisier in Nodejs in command prompt se poate realiza extrem de usor. Primul pas pe care trebuie sa il facem este sa navigam din command prompt in directorul sau locul unde se afla acest fisier. Urmatorul pas este reprezentat de scrierea comenzi in terminal. Primul cuvant va fi intotdeauna node urmat de numele fisierului cu sau fara extensie. Nodejs presupune ca acel fisier are extensia .js si nu este neaparat sa o mai scriem. Asadar node nume-fisier si apasam tasta ENTER ii spune Nodejs-ului sa ruleze script-ul ce se afla in acel fisier.

Obiectul process

Un obiect foarte important pentru noi este obiectul process si acesta este disponibil la nivel global in script-urile noastre. Obiectul process contine functionalitati care ne permit sa interactionam cu informatiile referitoare la instanta procesului curent. Putem folosi obiectul process pentru a obtine informatii de mediu precum citirea variabilelor de mediu, sa comunicam cu terminalul sau procesul curent ce ruleaza cu ajutorul obiectelor copil stdin si stdout iar din acestea vom folosi metoda write.

Cu ajutorul obiectului process putem chiar sa incheiem un proces sau un script in executie (este acelasi lucru) cu ajutorul metodei exit (ce aprtine direct obiectului process) declansand in acest fel evenimentul exit, eveniment pe care putem rula o functie.

In esenta obiectul process ne permite o modalitate de a lucra cu instanta procesului curent. Un aspect important la obiectul process este ca putem strange toate informatiile din terminal sau command prompt in momentul cand aplicatia incepe.

Toate aceste informatii vor fi salvate in variabila argv din obiectul process, process.argv, iar numele variabilei vine de la argument variable. Variabila argv este de fapt un array ce contine ca setare de baza un string reprezentand calea absoluta in sistemul de operare catre executabilul node ['C:\\Program Files\\nodejs\\node.exe']. In situatia in care vom creea un fisier JavaScript iar in acesta vom adauga linia de cod console.log(process.argv);, Nodejs ne va afisa acelasi array insa de aceasta data cu doua string-uri. Primul string ramane neschimbat iar al doilea string este reprezentat de calea absoluta in sistemul de operare catre fisierul unde se afla linia de cod inserata.

Pentru mai multe informatii despre obiectul process puteti sa mergeti la urmatoarea adresa https://nodejs.org/api/process.html.

Modulul File System

Modulul File System reprezinta un modul incorporat in Nodejs. Acesta este disponibil la nivel global si il putem folosi oriunde in script-urile noastre. Modulul File System este reprezentat in Nodejs doar de primele doua litere ale cuvintelor File System si cu litere mici. Pentru a putea folosi modulul fs va trebui sa il inseram in script-ul nostru cu ajutorul metodei globale require pe care o vom adauga intr-o variabila ce va avea acelasi nume cu modulul. Din moment ce modulul fs este disponibil la nivel global si este implicit incorporat in Nodejs atunci singurul lucru care mai trebuie facut in interiorul metodei require este sa adaugam literele fs ca parametru sub forma unui string (var fs = require('fs');).

Modulul fs ne ofera posibilitatea sa lucram cu fisiere si directoare si pentru acest lucru avem la dispozitie mai multe metode care fac acest lucru. Modulul fs contine pentru fiecare metoda in parte o varianta de lucru sincron si o varianta de lucru asincron. Metodele asincron sunt cele mai utilizate si asta pentru ca ofera posibilitatea de raspuns a script-ului nostru intr-un timp foarte scurt. Vom intalni situatii in care va trebui sa rulam o metoda in mod sincron pentru ca script-ul nostru sa poata functiona. Una din aceste situatii este intalnita in momentul cand vrem sa stergem un director ce contine mai multe fisiere despre un utilizator sau alt tip de date. Pentru a putea realiza acest lucru mai intai trebuie sa citim acel director cu metoda readdir, metoda ce va returna un array cu string-uri reprezentand numele fisierelor, si ulterior sa stergem fiecare fisier in parte din array si din director cu metoda forEach ce va avea ca parametru un callback care va sterge fiecare fisier in parte din array si din director. Voi puteti folosi orice varianta de lucru doriti sau o stapaniti mai bine.

Modulul fs ne ofera posibilitatea de a creea fisiere si/sau directoare in mod sincron sau asincron, ne ofera posibilitatea de a scrie in fisiere si/sau directoare in mod sincron sau asincron, ne ofera posibilitatea de a redenumi sau muta un fisier si/sau director in mod sincron sau asincron dar si posibilitatea de a sterge fisiere si/sau directoare in mod sincron sau asincron. Practic putem face orice se poate face cu fisiere si directoare.

Modulele http si https

Modulele http si https sunt doua module incorporate in Nodejs si la fel ca si modulul File System vom avea nevoie de metoda require pentru a-l include in script-ul nostru. Cu ajutorul modulelor http si https vom putea creea un server web securizat sau nu prin care vom raspunde diferitelor cerinte de la client, asa zisele request-uri, dar si sa gestionam diferite raspunsuri catre client. Modulele http si https sunt in mare parte indentice iar diferenta este data de certificatul SSL de care serverul are nevoie pentru a creea o conexiune securizata cu browser-ul client si in acest caz rezultand protocolul https identic ca si denumire cu modulul pe care il vom folosi in acest caz.

Ambele module contin metode si proprietatii cu aceleasi denumiri cu rol semantic. Doua dintre cele mai des folosite metode sunt createServer si listen. Metoda createServer va creea un server si va avea un singur parametru reprezentat de catre o functie anonima callback. Functia callback va avea doi parametri ce vor contine datele legate de mediul de pe server dar si datele legate de mediul de la client. Acesti doi parametri sunt req si res, in aceasta ordine ca si parametrii in functia callback. Metoda listen va avea de cele mai multe ori un singur parametru iar acesta va fi o valoare numerica reprezentand portul catre care browser-ul trebuie sa astepte datele de la server. Al doilea parametru este optional si este reprezentat de catre o functie anonima.

Modulele http si https sunt mult mai complexe decat v-am spus in doua paragrafe si pentru a afla mai multe informatii va invit sa cititi documentatia oficiala de la urmatorul url https://nodejs.org/api/http.html.

Alte module in Nodejs

Nodejs are in componenta mai multe module pe care le putem folosi. Modalitatea prin care putem vedea ce module incorporate in Nodejs avem este urmatoarea. Deschideti terminalul Nodejs (Nodejs command prompt) si intrati in instanta Nodejs iar asta se poate realiza inserant cuvantul node si apoi apasati tasta ENTER. Urmatorul pas este sa accesati array-ul moduleLoadList din obiectul process si pentru asta va trebui sa scrieti process.moduleLoadList si apoi apasati tasta ENTER. Imediat veti vedea o lista cu toate modulele native si nu numai pe care Nodejs le are incorporate. Urmatorul pas este sa cititi documentatia oficiala despre aceste module.

Fisierul package.json

In momentul in care vom creea un proiect Nodejs va trebui sa initializam acel proiect iar asta inseamna creearea unui fisier package.json in care Nodejs va insera diferite informatii legate de proiectul nostru. Fisierul package.json are o structura importanta pentru Nodejs iar cel mai bine este sa cream acest fisier cu ajutorul terminalului.

Trebuie sa avem grija ca in terminal sa fim in directorul in care va fi intreg proiectul nostru iar acesta este bine sa fie gol in acest moment. In terminal vom insera linia de comanda npm init si apasam tasta ENTER. In terminal Nodejs ne va pune o serie de intrebari la care vom raspunde cu litere mici si fara spatii. Pentru o mai buna intelegere a acestui fisier noi putem folosi caracterul minus ( - ). La aceste informatii putem sa nu raspundem si in acest caz vom apasa tasta ENTER pentru fiecare intrebare, scopul fiind sa cream acest fisier json.

Informatiile pe care acest fisier le va contine vor avea legatura cu detaliile proiectuilui nostru. Detalii precum versiunea proiectului, o scurta descriere a proiectului, diferite comenzi ce pot rula in terminal ca setare de baza (obiectul scripts), detalii despre autor si licenta si in cele din urma date despre module externe Nodejs, module pe care le instalam separat din terminal. Acestea sunt in mare informatiile pe care fisierul packjage.json le va contine. Acest fisier va fi actualizat de Nodejs in momentul cand instalam un modul extern si la sfarsitul numelui modului vom adauga legat sau nu (depinde de ce instalam) de acesta doua caractere minus si cuvantul save ( --save ).

Din moment ce fisierul package.json va contine numele si versiunea modulelor externe Nodejs pe care le vom folosi in proiectul nostru, Nodejs ne ofera posibilitatea sa stergem subdirectorul node_modules (subdirector despre care veti afla imediat) si sa trimitem catre un alt programator intreg proiectul nostru la o dimensiune mult mai mica iar celuilant programator nu ii va mai ramane sa faca decat sa insereze urmatoarea linie de comada in terminal, comanda prin care isi va instala toate modulele externe si versiunea acestora pentru ca proiectul sa poata functiona (npm install si apasa tasta ENTER).

Module externe Nodejs

Pe langa modulele native ale Nodejs, comunitatea Nodejs este in permanenta preocupata sa dezvolte module pe care mai apoi sa le folosim dupa bunul plac. In prezent numarul modulelor se apropie de cifra 100.000 si sigur aceasta cifra va fi depasita. Noi putem folosi oricare din aceste module intr-un mod cat se poate de simplu. Metoda de lucru ne impune sa cream un director unde vom avea intreg proiectul nostru. Urmatorul pas este sa ajungem in acest director prin terminalul Nodejs. Odata ajunsi in acest director prin terminalul Nodejs va trebui sa instalam unul sau mai multe module pe care vrem sa le avem in proiectul nostru. Modalitatea de instalare este foarte simpla. Cuvintele npm install nume-modul reprezinta linia de comanda cea mai des utilizata, insa trebuie avut grija sa nu se fi schimbat ceva intre timp si pentru asta trebuie citita documentatia oficiala despre acel modul. Dupa ce am scris aceasta linie de cod pentru Nodejs vom apasa tasta ENTER.

In momentul urmator vom vedea cum sunt descarcate fisierele noastre de pe net. Pentru a vedea fisierele descarcate Nodejs va creea un subdirector cu numele node_modules iar in interiorul acestuia va creea un alt subdirector cu numele fiecarui modul pe care l-am instalat. Pentru a inlatura un modul sau unul cate unul va trebui sa scriem in terminal linia de comanda npm remove nume-modul iar Nodejs il va sterge. O alta modalitate de a sterge un modul extern este mai simpla de atat si se rezuma la stergerea directorului asa cum o facem cu ajutorul tastelor sau a mouse-ului.