Zašto Node.js ?
Kao prvo omogućava korišćenje jedinstvenog jezika između front-end i back-end-a. To znači da kompletnu aplikaciju možete realizovati pomoću jednog programskog jezika.Drugo, Brzina – Brz je. Zajedno sa Guglovim V8 JavaScript engine-om, ima neverovatnu brzinu. Zapravo, nekoliko puta je brži od ostalih skriptnih jezika poput Ruby-a i Python-a.
Treće, njegova neblokirajuća arhitektura je idealna za pravljenje real-time web aplikacija. JavaScript je izabran kao jezik zbog svog malog core API-ja i nonblocking callbacks-a. To znači da je moguće izgraditi kompletan Node.js ekosistem oko neblokirajućih paketa, kojih trenutno ima više od deset hiljada. Krajnji rezultat je platforma i ekosistem koji se arhitekturalno savršeno uklapa sa zahtevima izrade modernih real-time web aplikacija.
Šta je to Node.js ?
Node.js je serverska JavaScript platforma koja se sadrži od minimalne core biblioteke pored bogatog ekosistema. Radi na V8 JavaScript engine-u, što znači da je veoma brz u izvršavanju.
Tradicionalno, programiranje se obavlja sinhrono: Linija koda se izvršava, sistem čeka rezultat, rezultat se procesuira i zatim se izvršavanje programa nastavlja. Ponekad taj sistem izvršavanja zahteva dugo čekanje; na primer čitanje sa baze podataka.
U jezicima poput Jave i C#, rešenje za ovaj problem je uvođenje nove niti izvršavanja – Thread-a.
Thread programiranje može zadati dosta poteškoća u situacijama kada više izvršavajuićih Niti pokušava da pristupi istim resursima konkurentno. Zamislite situaciju u kojoj jedan thread povećava brojač, a drugi ga u isto vreme smanjuje.
JavaScript ima sasvim drugačiji pristup takvom problemu. Uvek se izvršava samo jedna Nit. Kada se izvršavaju neke spore I/O operacije, kao što je čitanje podataka iz baze, program ne čeka, nego ide na izvršavanje sledeće linije koda. Kada se I/O operacija vrati, pokreće se callback funkcija i rezultat se procesuira. Node.js nudi jednostavan, brz, asinhroni event-driven model model programiranja za izradu modernih web aplikacija.
NPM: Node Package Manager
Kada se govori o Node.js, stvar koja se ne sme izostaviti je ugrađena podrška za upravljanje paketima pomoću NPM alata koji podrazumevano dolazi sa svakom Node.js instalacijom. Sama ideja NPM modela je veoma slična Ruby gemovima.
Neki od najpopularnijih NPM modula su:
express – Express.js, web framework poput Sinatre. Standard je za većinu Node.js aplikacija danas.
connect – Connect je HTTP server framework za Node.js, koji omogućava kolekciju pluginova širokog spektra performansi, poznatijih kao middleware.
socket.io i sockjs – Websocket komponente.
Jade – Jedan od najpopularnijih templating engine-a, inspirisan HAML-om.
mongo i mongojs – MongoDB omotač. Omogućava API za MongoDB objekte za bazu u Node.js
redis – Redis klijentska biblioteka.
coffee-script – CoffeeScript kompajler koji omogućava developerima da pišu svoje Node.js aplikacije u coffeescript-u.
underscore (loadsh, lazy) – Jedan od popularnijih alatskih biblioteka u JavaScript-u.
forever – Alat koji omogućava da vaša node skripta radi neprekidno i obezbeđuje da Node.js u proizvodnji ne dođe do nekih neočekivanih grešaka
Gde je Node.js najbolji za upotrebu:
Chat aplikacije
Chat je tipičan primer real-time, multi-user aplikacije i najbolji primer gde Node.js dolazi do izražaja.
Kako to otprilike izgleda:
U nekom najjednostavnijem primeru imamo chatroom na našem web sajtu gde korisnici mogu da razmenjuju poruke.
Sa serverske strane imamo Express.js aplikaciju koja implementira dve stvari:
- GET “/” request handler koji opslužuje veb stranicu sa porukom i dugmetom za slanje i inicijalizovanje nove poruke.
- Websocket server koji sluša novu poruku koju šalje websocket client.
Sa klijentske strane se nalazi HTML stranica sa nekoliko podešenih handlera.
Evo šta se dešava kada jedan od klijenata pošalje poruku:
- Browser hvata događaj klika dugmeta, preko JavaScript handlera, kupi vrednost iz input polja (tekstualnu poruku) i emituje websocket poruku upotrebom websocket klijenta koji je konektovan na naš server.
- Serverska komponenta websocket konekcije prima poruku i prosleđuje ga na svim ostalim povezanim klijentima koji koriste metod emitovanja.
- Svi klijenti dobijaju novu poruku kao push message preko websocketa sa klijentske strane. Zatim kupe sadržaj te poruke i ažurira web stranicu prikazivanjem nove poruke.
Instalacija Node.js
Zvanični sajt
https://nodejs.org/download/
Github:
https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
Posle instalacije, kako bi proverili da li je node.js ispravno instaliran, odemo u command prompt i ukucamo node -v, ili node –version. Ako je instalacija uspesno izvrsena na ekranu bi trebali da vidimo verziju instaliranog node-a. Posle toga cemo proveriti verziju NPM-a, komandom npm -v.
Evo kako mozemo napraviti jednostavan server:
U folderu projekta napravili smo fajl server.js:
[code]
var http = require(‘http’);
var fs = require(‘fs’);
function send404Response(response) {
response.writeHead(404, {„Content-Type“: „text/plain“});
response.write(„Error 404: Page not found!“);
response.end();
}
function onRequest(request, response) {
if(request.method == ‘GET’ && request.url == ‘/’){
response.writeHead(200, {„Content-Type“: „text/html“});
fs.createReadStream(‘./index.html’).pipe(response);
}
else {
send404Response(response);
}
}
http.createServer(onRequest).listen(3000);
console.log(„Server is running on port:3000“);
[/code]
Stranica index.html
[code]
<html>
<head>
<title>Simple Server</title>
</head>
<body>
<h1>Ovo je HTML stranica</h1>
</body>
</html>
[/code]
sacuvamo fajl i u command promptu odemo do foldera projekta, kod nas se nalazi na desktopu.
Kada pokrenemo komandu node server.js i odemo u browser na adresu
http://localhost:3000/ u prozoru bi trebali da dobijemo poruku: