Download - WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction
![Page 1: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/1.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Dezvoltarea aplicațiilor Web
⍟JavaScript la nivel de server – node.js
(aspecte esențiale)
![Page 2: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/2.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
„Cine a văzut vreodată o bijuterie frumos cizelatăde bijutier cu ajutorul ciocanului?”
Jan Amos Comenius
![Page 3: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/3.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
“Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven,
non-blocking I/O model that makes it lightweight and efficient. Node.js’ package ecosystem – npm – is the largest
ecosystem of open source libraries in the world.”
“Node.js is designed to buildscalable network applications.”
![Page 4: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/4.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Ryan Dahl concepe Node.js (2009) – nodejs.org
rulează pe mașini respectând POSIX + Windows (2011)
adoptat de industrie (din 2012)e.g., Cloud9 IDE, eBay, Google, LinkedIn, Netflix, Storify, Twitter
hackernoon.com/@nodejs
Node.js Foundation (2015)IBM, Intel, Joyent, Microsoft, RedHat, SAP, The Linux Foundation,…
io.js – o variantă Node.js concepută în ES6 al cărei cod-sursă a fost încorporat în Node.js 4 (2015)
Node.js 6.11.4 LTS – Long Term Support (octombrie 2017)versiune stabilă actuală pentru uz în producție
Node.js 8.6.0 – varianta curentă (octombrie 2017)https://github.com/nodejs/node
![Page 5: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/5.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js
Oferă un mediu de execuție în linia de comandă, pe baza unor biblioteci C++ și a procesorului V8
node program.js
![Page 6: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/6.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js
Permite dezvoltarea de aplicații Web la nivel de server în limbajul JavaScript
recurge la V8 – procesor (interpretor) JavaScript creat de Google, implementat în C++ și disponibil liber
https://developers.google.com/v8/
![Page 7: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/7.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
Oferă suport pentru cele mai importanteprotocoale Web și Internet
HTTP (HyperText Transfer Protocol)DNS (Domain Name System)
TLS (Transport Layer Security)functionalități de nivel scăzut (socket-uri TCP)
![Page 8: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/8.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js
![Page 9: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/9.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
Intern, se recurge la diverse biblioteci open source C sau C++
libuv (asynchronous I/O) – docs.libuv.org
c-ares (asynchronous DNS requests) – c-ares.haxx.se
OpenSSL (crypto & SSL/TLS) – www.openssl.org
zlib (compression) – zlib.net
V8 (JavaScript engine) – v8docs.nodesource.com
![Page 10: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/10.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizareUzual, o aplicație Web realizează un număr mare de operații – în acest caz, asincrone – de intrare/ieșire
G. Yeh (2014): www.slideshare.net/garyyeh165/basic-understanding-and-implement-of-nodejs
![Page 11: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/11.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
Operațiile de intrare/ieșire sunt asincrone
fiecare cerere (operație) adresată aplicației– e.g., acces la disc, la rețea, la alt proces – poate aveaatașată o funcție de tratare a unui eveniment specific
evented I/O
![Page 12: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/12.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
cod JS executat declient (browser Web)
cod JS rulat pe parteade server (node.js)
așteaptă și trateazăevenimente de
interacțiune(onclick, onmouseover,
onkeypressed,…)
procesarebazată pe
evenimenteevented/
event-based
așteaptă și trateazăcereri (evenimente)
provenite de la client(i)
programul trebuie să fie responsiv atunci când
așteaptă încărcareadatelor de pe rețea
(e.g., JSON, XML, imagini, video) via Ajax/Comet
ori socket-uri Web
asincronism(e.g., operatiineblocante)
programul trebuie să fie responsiv atunci când
așteaptă încărcareadatelor locale/externe(preluate din baze de
date, fișiere, servicii Web, API-uri,…)
adaptare după Ben Sheldon (2012)
![Page 13: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/13.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
O aplicație node.js rulează într-un singur proces
event loop ≡ “an entity that handles & processes externalevents and converts them into callback invocations”
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
![Page 14: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/14.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
O aplicație node.js rulează într-un singur proces
event loop ≡ “an entity that handles & processes externalevents and converts them into callback invocations”
codul JavaScript nu este executat paralel, dar tratează în mod asincron diverse evenimente I/O
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
![Page 15: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/15.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizareAplicația node.js „reacționează” la evenimente
context mai larg: reactive programming – http://reactivex.io/
G. Yeh (2014): www.slideshare.net/garyyeh165/basic-understanding-and-implement-of-nodejs
![Page 16: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/16.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
O aplicație node.js rulează într-un singur proces
deosebire esențială față de serverele de aplicații Webtradiționale ce recurg la servere multi-process/threaded
![Page 17: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/17.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
O aplicație node.js rulează într-un singur proces
server tipic server node.js
adaptare după Ben Sheldon (2012)
![Page 18: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/18.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
bijoor.me/2013/06/09/java-ee-threads-vs-node-js-which-is-better-for-concurrent-data-processing-operations/
operații de intrare/ieșire sincrone versus
operații de intrare/ieșire asincrone
![Page 19: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/19.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
HTTP: server Web
strongloop.github.io/strongloop.com/strongblog/node-js-is-faster-than-java/
![Page 20: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/20.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Mediul node.js e disponibil gratuit – open source –pentru platformele UNIX/Linux, Windows, MacOS
https://nodejs.org/en/download/
node.js: caracterizare
![Page 21: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/21.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
funcționalități suplimentareoferite de module administrate cu npm – https://npmjs.org/
![Page 22: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/22.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: caracterizare
Utilitarul npm poate gestiona dependențe imbricate
detalii la docs.npmjs.com
![Page 23: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/23.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: exemplu
Un prim program care emite mesaje de salut
// salutari.js: un program (de sine-stătător) care emite un salut
console.log ('Salutari banale din Node.js');
invocarea uneimetode oferită de
un obiect predefinit
![Page 24: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/24.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: exemplu
Un prim program care emite mesaje de salut
// salutari.js: un program (de sine-stătător) care emite un salut
console.log ('Salutari banale din Node.js');
> node salutari.js
Salutari banale din Node.js
![Page 25: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/25.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
/* Un program JavaScript ilustrând comportamentul asincron
al operațiilor I/O implementate de Node.js */
var fs = require ('fs'); // acces la sistemul de fișiere
fs.readFile ('salutari.txt', 'utf-8', function (eroare, date) {
if (eroare)
throw eroare; // excepție de citire
console.log (date);
})
console.log ('Gata!');
execuția (cod interpretat) pornește de la prima linie a programului JavaScript
![Page 26: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/26.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
/* Un program JavaScript ilustrând comportamentul asincron
al operațiilor I/O implementate de Node.js */
var fs = require ('fs'); // acces la sistemul de fișiere
fs.readFile ('salutari.txt', 'utf-8', function (eroare, date) {
if (eroare)
throw eroare; // excepție de citire
console.log (date);
})
console.log ('Gata!');
începe execuția unei operații asincrone(aici, citirea conținutului unui fișier text)
care returnează imediat
![Page 27: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/27.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
/* Un program JavaScript ilustrând comportamentul asincron
al operațiilor I/O implementate de Node.js */
var fs = require ('fs'); // acces la sistemul de fișiere
fs.readFile ('salutari.txt', 'utf-8', function (eroare, date) {
if (eroare)
throw eroare; // excepție de citire
console.log (date);
})
console.log ('Gata!');
execuția continuă cu ultima linie de program
> node asincronism.js
Gata!
![Page 28: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/28.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
/* Un program JavaScript ilustrând comportamentul asincron
al operațiilor I/O implementate de Node.js */
var fs = require ('fs'); // acces la sistemul de fișiere
fs.readFile ('salutari.txt', 'utf-8', function (eroare, date) {
if (eroare)
throw eroare; // excepție de citire
console.log (date);
})
console.log ('Gata!');
…după care sunt afișate datele preluate din fișier
> node asincronism.js
Gata!
Un prim salut...
Acesta este al doilea salut.
![Page 29: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/29.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
// Un program JavaScript care salută toți posibilii săi clienți Web
var http = require ('http'); // folosim 'http', un modul Node predefinit
http.createServer ( // creăm un server Web
// funcție anonimă ce tratează o cerere și trimite un răspuns
function (cerere, raspuns) {
// afișăm la consola serverului mesaje de diagnostic
console.log ('Am primit o cerere...');
// stabilim valori pentru diverse câmpuri din antetul mesajului HTTP
raspuns.writeHead (200, { 'Content-Type': 'text/html' });
// emitem răspunsul propriu-zis conform tipului MIME (aici, cod HTML)
raspuns.end ('<html><body><h1>Salutari…</h1></body></html>');
}
// serverul ascultă cereri la portul 8080 al mașinii locale
).listen (8080, "127.0.0.1");
console.log ('Serverul creat asteapta cereri la http://127.0.0.1:8080/');
![Page 30: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/30.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
pe partea de server – așteptare de cereri> node salutari-web.js
Serverul creat asteapta cereri la http://127.0.0.1:8080/
Am primit o cerere...
Am primit o cerere...
programul JavaScript creat funcționează ca un server Webpentru fiecare cerere emisă de un posibil client (browser,aplicație desktop etc.) conform modelului client/server
![Page 31: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/31.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
pe partea de server – așteptare de cereri> node salutari-web.js
Serverul creat asteapta cereri la http://127.0.0.1:8080/
Am primit o cerere...
Am primit o cerere...
la client – recepționarea răspunsului conform cererii GETemise de un program desktop și de un navigator Web
> node client-salutari.js
Am primit raspuns de la server -- cod HTTP: 200
Continut receptionat: <html><body>
<h1>Salutari din Node.js</h1></body></html>
programul JavaScript creat funcționează ca un server Webpentru fiecare cerere emisă de un posibil client (browser,aplicație desktop etc.) conform modelului client/server
![Page 32: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/32.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
// Un program JS care implementează un client pentru serviciul de salut
var http = require ('http');
http.get ('http://127.0.0.1:8080/', // emite o cerere HTTP
function (raspuns) {
console.log ('Am primit raspuns de la server -- cod HTTP: '
+ raspuns.statusCode); // statusCode: 200, 404,…
})
// tratăm diverse evenimente via funcții (eventual, anonime) de tip callback
.on ('error', // eroare
function (e) { console.log ('Eroare: ' + e.message); })
.on ('response', // receptare răspuns de la server
function (raspuns) { // există date de procesat
raspuns.on ('data', function (date) {
console.log ('Continut receptionat: ' + date);
});
}
);
![Page 33: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/33.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module
Funcția require () specifică utilizarea unui modul Node.js
module predefinite (built-in):
privitoare la tehnologii Web – http, https, url, querystring
referitoare la fișiere – fs, path
vizând rețeaua – net, dns, dgram, tls,…resurse privind sistemul de operare – os, child_process
alte aspecte de interes – buffer, console, util, crypto
suport multi-core – cluster
![Page 34: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/34.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module
documentația online aferentă
nodejs.org/en/docs/
devdocs.io/node/
![Page 35: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/35.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: moduleatenție:
o parte dintre funcționalități sunt experimentale
nodejs.org/api/documentation.html
![Page 36: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/36.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – http
Dezvoltarea de aplicații Web via modulul http
funcționalități HTTP de bază
crearea unui server Web: createServer()
realizarea de cereri HTTP: request() get()
![Page 37: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/37.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – http
Dezvoltarea de aplicații Web via modulul http
servire de cereri HTTP – clasa http.Server
metode uzuale: listen() setTimeout() close()
evenimente ce pot fi tratate: request connect close clientError etc.
![Page 38: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/38.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – http
Dezvoltarea de aplicații Web via modulul http
răspuns emis de server – clasa http.ServerResponse
metode uzuale: writeHead() getHeader() removeHeader() write() end() etc.
evenimente: close finish
proprietăți folositoare: statusCode headersSent
![Page 39: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/39.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – http
Dezvoltarea de aplicații Web via modulul http
cerere emisă de client – clasa http.ClientRequest
metode uzuale: write() abort() end() setTimeout() setSocketKeepAlive()
evenimente ce pot fi tratate: response connect continue socket etc.
![Page 40: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/40.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – http
Dezvoltarea de aplicații Web via modulul http
mesaj vehiculat – clasa http.IncomingMessage
metode: setEncoding() setTimeout() pause() resume()
evenimente ce pot fi tratate: data end close
proprietăți de interes: httpVersion headers method url statusCode socket
![Page 41: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/41.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – url
Procesarea adreselor Web via modulul url
metode oferite: parse() format() resolve()
nodejs.org/api/url.html
![Page 42: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/42.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
covar url = require ('url');
var adresaWeb = url.parse (
'http://undeva.info:8080/oferta/jucarii/produs/?nume=Tux&marime=17#descriere',
true // generează un obiect 'query' ce include câmpurile din querystring
);
console.log (adresaWeb);
if (adresaWeb['query'].marime > 13) {
console.log ('Jucaria e in regula.');
} else {
console.log ('Jucaria e stricata.');
}
![Page 43: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/43.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
> node url.js
{ protocol: 'http:',
slashes: true,
auth: null,
host: 'undeva.info:8080',
port: '8080',
hostname: 'undeva.info',
hash: '#descriere',
search: '?nume=Tux&marime=17',
query: { nume: 'Tux', marime: '17' },
pathname: '/oferta/jucarii/produs/',
path: '/oferta/jucarii/produs/?nume=Tux&marime=17',
href: 'http://undeva.info:8080/oferta/jucarii/produs/?nume=…'
}
Jucaria e in regula.
![Page 44: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/44.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – net
Crearea de aplicații Internet – modulul net
partea de server:
createServer()
+ clasa net.Server
metode: listen() close() address() getConnections()
evenimente: listening connection close error
![Page 45: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/45.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – net
Crearea de aplicații Internet – modulul net
partea de client:
connect()
createConnection()
![Page 46: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/46.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – net
Crearea de aplicații Internet – modulul net
acces la socket-uri – clasa net.Socket
metode: connect() write() setEncoding() destroy() end() etc.
evenimente: connect data end timeout drain error close
proprietăți utile: localAddress localPort
remoteAddress remotePort bytesRead bytesWritten bufferSize
![Page 47: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/47.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – fs
Acces la sistemul de fișiere via modulul fs
metode folosite uzual – comportament asincron:
open() read() write() close()
truncate() stat() chmod() rename() exists()
isFile() isDirectory() isSocket()
mkdir() rmdir() readdir()
![Page 48: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/48.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – fs
Acces la sistemul de fișiere via modulul fs
studiu de caz (Victor Porof, 2013 – absolvent FII): generare de liste de melodii via iTunes și Last.fm
(ilustrează și maniera de creare a modulelor proprii)
https://github.com/victorporof/plgen
![Page 49: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/49.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
abstractizează accesul la date stocate parțial(partially buffered data)
se emit evenimente ce pot fi tratate de codul aplicației
![Page 50: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/50.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
pot fi citite – stream.Readable
pot fi scrise – stream.Writable
duplex (citite și scrise) – stream.Duplex
realizând o transformare a datelor – stream.Transform
detalii la https://nodejs.org/api/stream.htmlmedium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c9141306be93
![Page 51: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/51.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
fluxuri ce pot fi citite (readable streams)e.g., create de fs.createReadStream() http.ServerRequest
http.ClientResponse net.Socket child.stdout process.stdin
![Page 52: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/52.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
fluxuri ce pot fi citite (readable streams)e.g., create de fs.createReadStream() http.ServerRequest
http.ClientResponse net.Socket child.stdout process.stdin
emit evenimentele readable data end error
![Page 53: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/53.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
fluxuri ce pot fi citite (readable streams)e.g., create de fs.createReadStream() http.ServerRequest
http.ClientResponse net.Socket child.stdout process.stdin
au asociate metodele pause() resume() destroy()
![Page 54: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/54.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
fluxuri ce pot fi scrise (writeable streams)e.g., create de fs.createWriteStream() http.ServerResponse
http.ClientRequest net.Socket child.stdin process.stdout
![Page 55: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/55.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
fluxuri ce pot fi scrise (writeable streams)e.g., create de fs.createWriteStream() http.ServerResponse
http.ClientRequest net.Socket child.stdin process.stdout
emit evenimentele drain error
![Page 56: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/56.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
fluxuri ce pot fi scrise (writeable streams)e.g., create de fs.createWriteStream() http.ServerResponse
http.ClientRequest net.Socket child.stdin process.stdout
oferă metodele write() end() destroy()
![Page 57: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/57.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
// Program ce preia ceea ce tastează utilizatorul la intrarea standard
// și scrie într-un fișier – conform M. Takada (2012)
var fs = require ('fs');
var fisier = fs.createWriteStream ('./spion.txt');
// la apariția datelor, le scriem în fișier
process.stdin.on ('data', function (date) { fisier.write (date); } );
// tratăm evenimentul de terminare a fluxului
process.stdin.on ('end', function() { fisier.end (); } );
// "reactivăm" intrarea standard; implicit, e în starea 'paused'
process.stdin.resume ();
obiectul process e global – detalii la nodejs.org/api/process.html
![Page 58: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/58.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: fluxuri de date
Accesul la date poate fi realizatprin intermediul fluxurilor (streams)
exemple de fluxuri de tip duplex:socket-uri TCP create cu net.Socket()
privind arhivele create cu zlib – nodejs.org/api/zlib.html
date criptate via crypto – nodejs.org/api/crypto.html
![Page 59: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/59.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: rulare temporizată
Se poate planifica execuția codului JavaScript
recurgerea la funcțiile globalesetTimeout ()
clearTimeout ()
setInterval ()
clearInterval ()
![Page 60: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/60.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
// creăm un server Web care trimite fiecărui client secvența valorilor unui contor
var server = http.createServer ().listen (8080, '127.0.0.1');
// stabilim un comportament la apariția evenimentului 'request' (cerere de la un client)
server.on ('request', function (cerere, raspuns) {
console.log ('Cerere de la clientul ' + cerere.headers['user-agent']);
raspuns.writeHead (200, { 'Content-Type': 'text/html' });
var contor = 0;
var interval = setInterval ( // generăm valori ale contorului conform intervalului de timp
function () {
raspuns.write ('<p>Contorul are valoarea ' + contor + '</p>');
console.log ('Contorul are valoarea ' + contor);
contor++;
if (contor >= 7) {
clearInterval (interval); // ștergem intervalul
raspuns.end (); // închidem fluxul de răspuns
console.log ('Am trimis raspuns clientului ' + cerere.headers['user-agent']);
}
}, 1000); // cod rulat la interval de 1000 milisecunde
});
![Page 61: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/61.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Cerere de la clientul … Mozilla/5.0 (Windows NT 10.0 …) … Firefox/56.0
Contorul are valoarea 0
Contorul are valoarea 1
Contorul are valoarea 2
Contorul are valoarea 3
Cerere de la clientul … Edge/14.14393
Contorul are valoarea 4
Contorul are valoarea 0
Contorul are valoarea 5
Contorul are valoarea 1
Contorul are valoarea 6
Am trimis raspuns clientului … Mozilla/5.0 (Windows NT 10.0 …) … Firefox/56.0
Contorul are valoarea 2
Contorul are valoarea 3
Contorul are valoarea 4
Contorul are valoarea 5
Contorul are valoarea 6
Am trimis raspuns clientului … Edge/14.14393
codul este rulatasincron
![Page 62: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/62.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
Cerere de la clientul … Mozilla/5.0 (Windows NT 10.0 …) … Firefox/56.0
Contorul are valoarea 0
Contorul are valoarea 1
Contorul are valoarea 2
Contorul are valoarea 3
Cerere de la clientul … Edge/14.14393
Contorul are valoarea 4
Contorul are valoarea 0
Contorul are valoarea 5
Contorul are valoarea 1
Contorul are valoarea 6
Am trimis raspuns clientului … Mozilla/5.0 (Windows NT 10.0 …) … Firefox/56.0
Contorul are valoarea 2
Contorul are valoarea 3
Contorul are valoarea 4
Contorul are valoarea 5
Contorul are valoarea 6
Am trimis raspuns clientului … Edge/14.14393
browser-ul Web va aștepta ca întreaga secvență de valorisă fie trimisă de către serverde ce?
![Page 63: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/63.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: evenimente
Emiterea (lansarea) și tratarea (prinderea)evenimentelor specificate de programator
se realizează via event.EventEmitter
clasă utilizată intern de multe biblioteci de bază
nodejs.org/api/events.html
![Page 64: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/64.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module externe
Funcția require () specifică utilizarea unui modul Node.js
module disponibile on-line (instalate via utilitarul npm)
de studiat Understanding NPMhttps://unpm.nodesource.com/
![Page 65: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/65.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module externe
Funcția require () specifică utilizarea unui modul Node.js
instalare globală a unui modul: npm install modul –g
listarea modulelor ce sunt instalate local: npm list
căutarea unui modul: npm search modul
eliminarea unui modul: npm uninstall modul
actualizarea unui modul: npm update modul
![Page 66: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/66.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – acces la baze de date
Operații cu baze de date relaționale SQLite
recurgerea la modulul sql.js implementat în JavaScriptvia compilatorul emscripten
nu depinde de alte module
detalii la www.npmjs.com/package/sql.js
exemple demonstrative (interpretor SQL ca aplicație Web): http://kripken.github.io/sql.js/GUI/
![Page 67: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/67.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module – studiu de caz
Dorim să realizăm un mini-robot care proceseazăconținutul diverselor resurse disponibile pe Web
rol de client pentru un server Web
prelucrează codul HTMLWeb scrapingmetode consacrate:
DOM (Document Object Model)SAX (Simple API for XML)
![Page 68: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/68.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
var http = require ('http');
var qs = require ('querystring');
var dom = require ('xmldom').DOMParser;
// de exemplu, dorim să obținem reprezentarea corespunzătoare resursei
// de la http://www.google.ro/search?q=web+programming+node.js
var cerere = http.get ("http://www.google.ro/search?" +
qs.stringify ({ q: 'web programming node.js' }), function (raspuns) {
var rezultat = ''; // răspunsul poate sosi în fragmente de date
raspuns.on ('data', function (date) { // tratăm evenimentul privitor la
rezultat += date; // apariția datelor
});
// tratăm evenimentul de finalizare a transferului de date de la server
raspuns.on ('end', function() {
console.log (procesareHTML (rezultat));
});
});conectare la un server Web
![Page 69: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/69.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
// realizează procesarea dorită (Web scrapping)function procesareHTML (document) {
var adrese = [ ]; // instanțiem un procesor DOMtry {var doc = new dom().parseFromString (document, "text/html");// preluăm toate elementele <a>var noduri = doc.getElementsByTagName ('a');// obținem valoarea atributului 'href' (URL-ul)for (var i = 0; i < noduri.length; i++) {
// plasăm în tablou doar dacă e relativ și e prefixat de "/url?q="var uri = noduri[i].getAttribute ('href');if (!uri.match (/^http(s?)/gi) && uri.match (/^\/url\?q=/g))
adrese.push (uri);}
} catch (e) { console.log (e.message); }return (adrese);
} procesare document cu DOMParserdeveloper.mozilla.org/DOMParser
![Page 70: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/70.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: module
lista modulelor Node.jsnodejsmodules.org/
![Page 71: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/71.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web
Uzual, încurajează dezvoltarea de aplicații Webîn care interacțiunea cu utilizatorulse realizează într-o singură pagină
(SPA – Single-Page Applications)
real-time single-page Web apps
![Page 72: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/72.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web – exemple
Alte facilități notabile:
MVC (Model-View-Controller) și varianteletransfer de date în timp-real – e.g., cu Socket.IO
servicii Web – paradigma RESTsuport pentru baze de date NoSQL
machete de redare a conținutului (templates)
![Page 73: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/73.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web – exemple
http://nodeframework.com/
![Page 74: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/74.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web – connect
Framework extensibil de tip middlewarededicat deservirii de cereri HTTP
github.com/senchalabs/connect
![Page 75: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/75.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web – connect
O cerere HTTP dată poate fi procesată – via use() –de una sau mai multe extensii (plugin-uri) specifice
această înlănțuire se denumește stivă (stack)
utilizarea unei extensii poate depinde de URL cereriidirijare (routing) – e.g., util în contextul REST
![Page 76: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/76.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web – connect
Extensii utile:body-parser – procesări diverse
(e.g., text, date dintr-un formular Web, date JSON,…)compression – procesarea mesajelor compresate (gzip)
cookie-parser – prelucrarea de cookie-uricookie-session express-session – sesiuni Web
errorhandler – tratarea erorilormorgan – suport pentru jurnalizare (logging)
csurf – protecție CSRF (Cross-Site Request Forgery)serve-static – deservirea conținutului static (i.e. fișiere)
vhost – suport pentru găzduire virtuală
![Page 77: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/77.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web – express
Framework minimalist ce încurajează dezvoltarea de aplicații Web
tradiționale – reprezentări multiple via hipermediabazate pe un unic punct de acces: SPA (Single Page App)
hibride (Web + aplicații native)
expressjs.com
![Page 78: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/78.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
/│ app.js│ package.json├───bin├───data├───node_modules│ ├───body-parser│ ├───cookie-parser│ ├───debug│ ├───express│ │ ├───lib│ ├───jade│ ├───morgan├───public│ ├───images│ ├───javascripts│ └───stylesheets│ style.css├───routes│ index.js│ users.js└───views
error.jadeindex.jadelayout.jade
eșafodajul unei aplicații Web bazate pe Express
specificarea interfeței (view-ul)via machete de vizualizare descrise
cu JADE: http://jade-lang.com/
rute vizând deservirea cererilor pe baza URL-urilor solicitate de client
module Node.js adiționale
conținut static destinat clientului(e.g., foi de stiluri CSS, biblioteci JS procesate de browser, imagini,…)
diverse configurări ale aplicației
specificarea modelelor de date
![Page 79: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/79.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: framework-uri web
MEAN (MongoDB, Express, Angular, Node.js) – mean.io
full stack Web developmentexemplificări:
devcenter.heroku.com/articles/mean-apps-restful-api
scotch.io/tutorials/creating-a-single-page-todo-app-with-node-and-angular
![Page 80: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/80.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: suport es6
Node.js 4+ oferă suport pentru ECMAScript 2015 (ES6)
facilități deja incluse: declararea variabilelor cu let și const
specificarea claselorcolecții de date (Map, WeakMap, Set, WeakSet)
generatoriexecuție asincronă (Promises)
....
nodejs.org/en/docs/es6/
![Page 81: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/81.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: suport es6
situația curentă a facilităților ECMAScript implementate de instrumente de conversie, navigatoare Web și Node.js
http://kangax.github.io/compat-table/es2016plus/
![Page 82: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/82.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: suport es6
Node.js – starea actuală de implementare a facilităților oferite de ECMAScript: node.green
![Page 83: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/83.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: utilizări pragmatice
Deservirea unui volum mare de conexiuniconcurente cu necesar minim de resurse
(procesor, memorie) într-un singur proces
![Page 84: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/84.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: utilizări pragmatice
Procesarea în timp-real a datelor JSON oferite de API-uri (multiple)
inclusiv, crearea de aplicații oferind fluxuri de date (streaming data)
![Page 85: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/85.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: utilizări pragmatice
Procesarea în timp-real a datelor JSON oferite de API-uri (multiple)
caz practic: redirectarea unui flux de mesaje Twitterspre dispozitive via PubNub (Marinacci, 2016)
www.pubnub.com/blog/2016-04-14-connect-twitter-and-pubnub-in-one-line-of-code-with-nodejs-streams/
![Page 86: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/86.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: utilizări pragmatice
Dezvoltarea rapidă de servicii Web sau API-uri conform paradigmei REST
(REpresentational State Transfer)
câteva framework-uri pentru dezvoltarea de API-uri:actionHero.js, facet, Frisby, restify, restmvc, percolator,…
![Page 87: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/87.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: utilizări pragmatice
Crearea de aplicații native (desktop) folosind tehnologii Web moderne precum HTML5
nw.js (fost node-webkit)utilizarea modulelor Node.js direct la nivel de DOM
http://nwjs.io/
![Page 88: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/88.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: instrumente de dezvoltare
Mediu de dezvoltare tradițional (desktop)
exemplificări:Nodeclipse & Enide (pentru Eclipse)
www.nodeclipse.org
Node.js Tools for Visual Studiowww.visualstudio.com/vs/node-js/
![Page 89: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/89.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
node.js: utilizări pragmatice
dezvoltare „în nori” de aplicații Web – e.g., Cloud9 și KodingS. Buraga, Cu codul în „nori” (2015) – www.slideshare.net/busaco/cu-codul-n-nori
![Page 90: WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An Introduction](https://reader031.vdocuments.site/reader031/viewer/2022030318/5a6d639e7f8b9ade418b54ab/html5/thumbnails/90.jpg)
Dr.
Sab
in B
ura
ga
profs.in
fo.uaic.ro/~busa
co
rezumat
⍟dezvoltarea de aplicații Web la nivel de server
cu Node.js – caracteristici, module, exemple