SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
Tehnologii Web




                                Dr. Sabin Buragawww.purl.org/net/busaco
Programare Web – supliment

   node.js: aspecte esentiale
Dr. Sabin Buragawww.purl.org/net/busaco
“Cine a vazut vreodata o bijuterie frumos cizelata
        de bijutier cu ajutorul ciocanului?”



              Jan Amos Comenius
node.js: (pre)istoric




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
    Brendan Eich dezvolta limbajul JavaScript (1995)


JavaScript inclus in browser-ul Netscape Navigator (1996)


Netscape propune Livewire – JS la nivel de server (1996)
                                      
     prima editie a standardului ECMAScript (1997)
node.js: (pre)istoric




                                                        Dr. Sabin Buragawww.purl.org/net/busaco
 Microsoft include obiectul XMLHttpRequest (1999)
                                 transfer asincron
                                  via Ajax (2005)
      JSON – JavaScript Object Notation (2000)
     format simplist pentru interschimb de date

           aparitia bibliotecii jQuery (2005)
abstractizeaza & simplifica manipularea paginilor Web

JS (ActionScript) pentru Adobe Creative Suite (2005)
node.js: (pre)istoric




                                                         Dr. Sabin Buragawww.purl.org/net/busaco
JavaScript in contextul bazelor de date – CouchDB (2006)

 Apple ofera WebKit bazat pe KHTML de la KDE (2007)
  disponibil in regim open source la www.webkit.org

   Google Chrome – cod JS performant via V8 (2008)
   ofera premisele crearii de aplicatii Web complexe
          rulate in cadrul navigatorului Web

   documentatii de referinta oferite de Mozilla (2011)
          http://developer.mozilla.org/
node.js: istoric




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
          Ryan Dahl creeaza Node.js (2009)
                http://nodejs.org/

Node.js ruleaza pe masini respectand standardul POSIX
          + pe calculatoare Windows (2011)

            Node.js este adoptat de industrie
e.g., Cloud9 IDE, eBay, LinkedIn, Storify, Yahoo! (2012)

       Node.js 0.10 – versiunea actuala (2013)
node.js: caracterizare




                                                       Dr. Sabin Buragawww.purl.org/net/busaco
“Node.js is a platform built on Chrome’s JavaScript
 runtime for easily building fast, scalable network
                    applications.
            Node.js uses an event-driven,
non-blocking I/O model that makes it lightweight
 and efficient, perfect for data-intensive real-time
 applications that run across distributed devices.”
node.js: caracterizare




                                                    Dr. Sabin Buragawww.purl.org/net/busaco
  Permite dezvoltarea de aplicatii Web
la nivel de server in limbajul JavaScript


recurge la V8 – procesor (interpretor) JavaScript
       creat de Google si disponibil liber
       https://code.google.com/p/v8/
node.js: caracterizare




                                                   Dr. Sabin Buragawww.purl.org/net/busaco
Ofera suport pentru cele mai importante
        protocoale Web si Internet


     HTTP (HyperText Transfer Protocol)
         DNS (Domain Name System)
        TLS (Transport Layer Security)
functionalitati de nivel scazut (socket-uri TCP)
node.js: caracterizare




                                                              Dr. Sabin Buragawww.purl.org/net/busaco
 Operatiile de intrare/iesire sunt asincrone



 fiecare cerere (operatie) adresata aplicatiei noastre
– e.g., acces la disc, la retea, la alt proces – poate avea
atasata o functie de tratare a unui eveniment specific

                       evented I/O
cod JS executat de                       cod JS rulat pe partea
 client (browser Web)                        de server (node.js)
                            procesare




                                                                     Dr. Sabin Buragawww.purl.org/net/busaco
  asteapta si trateaza
     evenimente de          bazata pe         asteapta si trateaza
      interactiune         evenimente        cereri (evenimente)
  (onclick, onmouseover,     evented/       provenite de la client(i)
    onkeypressed,…)         event-based

programul trebuie sa fie                    programul trebuie sa fie
 responsiv atunci cand                       responsiv atunci cand
   asteapta incarcarea     asincronism        asteapta incarcarea
   datelor de pe retea      (e.g., operatii  datelor locale/externe
(e.g., JSON, XML, imagini,   neblocante)     (provenite din baze de
 video) via Ajax/Comet                            date, fisiere,
    ori socket-uri Web                      servicii Web, API-uri,…)

 adaptare dupa Ben Sheldon (2012): http://www.island94.org/?p=3066
node.js: caracterizare




                                                       Dr. Sabin Buragawww.purl.org/net/busaco
O aplicatie node.js ruleaza intr-un singur proces



       codul JavaScript nu este executat paralel,
 dar trateaza in mod asincron diverse evenimente I/O

              single-process event loop
node.js: caracterizare




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
O aplicatie node.js ruleaza intr-un singur proces



  deosebire esentiala fata de serverele de aplicatii Web
traditionale ce recurg la servere multi-process/threaded
node.js: caracterizare




                                                                    Dr. Sabin Buragawww.purl.org/net/busaco
O aplicatie node.js ruleaza intr-un singur proces




             server tipic            server node.js

adaptare dupa Ben Sheldon (2012): http://www.island94.org/?p=3066
node.js: caracterizare




                                                       Dr. Sabin Buragawww.purl.org/net/busaco
 Mediul node.js e disponibil gratuit – open source –
pentru platformele UNIX/Linux, Windows, Mac OS X

         http://nodejs.org/download/
functionalitatile
suplimentare sunt oferite
 de module administrate




                            Dr. Sabin Buragawww.purl.org/net/busaco
         via npm

  https://npmjs.org/
node.js: caracterizare




                                                   Dr. Sabin Buragawww.purl.org/net/busaco
Ofera un mediu de executie in linia de comanda,
pe baza unor biblioteci C++ si a procesorului V8


           (infoiasi)$ node program.js
node.js: exemplu




                                                                    Dr. Sabin Buragawww.purl.org/net/busaco
         Un prim program care emite saluturi

// salutari.js: un program (de sine-statator) care emite un salut
console.log ('Salutari banale din Node.js');

             invocarea unei
            metode oferita de
           un obiect predefinit
node.js: exemplu




                                                                    Dr. Sabin Buragawww.purl.org/net/busaco
         Un prim program care emite saluturi

// salutari.js: un program (de sine-statator) care emite un salut
console.log ('Salutari banale din Node.js');


(infoiasi)$ node salutari.js
Salutari banale din Node.js
// Un program JavaScript care saluta toti posibilii sai clienti Web
var http = require ('http');  // folosim 'http', un modul Node predefinit

http.createServer (               // cream un server Web




                                                                            Dr. Sabin Buragawww.purl.org/net/busaco
 // functie anonima ce trateaza o cerere si trimite un raspuns
 function (cerere, raspuns) {
   // afisam la consola serverului mesaje de diagnostic
   console.log ('Am primit o cerere...');
   // stabilim valori pentru diverse campuri-antet HTTP
   raspuns.writeHead (200, { 'Content-Type': 'text/html' });
   // emitem raspunsul propriu-zis conform tipului MIME (cod HTML)
   raspuns.end ('<html><body><h1>Salutari…</h1></body></html>');
 }
 // serverul asculta cereri la portul 8080 al masinii locale
 ).listen (8080, "127.0.0.1");

console.log ('Serverul creat asteapta cereri la http://127.0.0.1:8080/');
programul JavaScript creat functioneaza ca un server Web
pentru fiecare cerere emisa de un posibil client (browser,
 aplicatie desktop etc.) conform modelului client/server




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
              pe partea de server – asteptare cereri
(infoiasi)$ 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 functioneaza ca un server Web
pentru fiecare cerere emisa de un posibil client (browser,
 aplicatie desktop etc.) conform modelului client/server




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
              pe partea de server – asteptare cereri
(infoiasi)$ 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 – receptionare raspuns conform cererii GET
    emise de un program desktop si de un navigator Web
(infoiasi)$ 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>
// Un program JS care implementeaza un client pentru serviciul de salut
var http = require ('http');

http.get ('http://127.0.0.1:8080/',       // emite o cerere HTTP




                                                                              Dr. Sabin Buragawww.purl.org/net/busaco
  function (raspuns) {
    console.log ('Am primit raspuns de la server -- cod HTTP: '
      + raspuns.statusCode);              // statusCode: 200, 404,…
  })
// tratam diverse evenimente
.on ('error',                             // eroare
  function (e) { console.log ('Eroare: ' + e.message); })
.on ('response',                          // receptare raspuns de la server
  function (raspuns) {                    // exista date de procesat
    raspuns.on ('data', function (date) {
           console.log ('Continut receptionat: ' + date);
          });
  }
);
node.js: module




                                                             Dr. Sabin Buragawww.purl.org/net/busaco
Functia require () specifica utilizarea unui modul Node.js


             module predefinite (built-in):

      privitoare la Web – http, https, url, querystring
              referitoare la fisiere – fs, path
           vizand reteaua – net, dns, dgram, tls,
resurse privind sistemul de operare – os, child_process
   alte aspecte de interes – buffer, console, util, crypto
node.js: module – http




                                                  Dr. Sabin Buragawww.purl.org/net/busaco
Dezvoltarea de aplicatii Web via modulul http

        functionalitati HTTP de baza

     crearea unui server Web: createServer()

     realizarea de cereri HTTP: request() get()
node.js: module – http




                                                Dr. Sabin Buragawww.purl.org/net/busaco
Dezvoltarea de aplicatii 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.
node.js: module – http




                                                              Dr. Sabin Buragawww.purl.org/net/busaco
  Dezvoltarea de aplicatii Web via modulul http

raspuns emis de server – clasa http.ServerResponse

                     metode uzuale:
  writeHead() getHeader() removeHeader() write() end() etc.

               evenimente: close clientError

     proprietati folositoare: statusCode headersSent
node.js: module – http




                                                               Dr. Sabin Buragawww.purl.org/net/busaco
 Dezvoltarea de aplicatii Web via modulul http

cerere emisa de client – clasa http.ClientRequest

                       metode uzuale:
write() abort() end() setTimeout() setSocketKeepAlive() etc.

              evenimente ce pot fi tratate:
          response connect continue socket etc.
node.js: module – http




                                                      Dr. Sabin Buragawww.purl.org/net/busaco
Dezvoltarea de aplicatii Web via modulul http

mesaj vehiculat – clasa http.IncomingMessage

metode: setEncoding() setTimeout() pause() resume()

    evenimente ce pot fi tratate: data end close

               proprietati de interes:
  httpVersion headers method url statusCode socket
node.js: module – url




                                           Dr. Sabin Buragawww.purl.org/net/busaco
Procesarea adreselor Web via modulul url


              metode oferite:
          parse() format() resolve()


         http://nodejs.org/api/url.html
var url = require ('url');




                                                                              Dr. Sabin Buragawww.purl.org/net/busaco
var adresaWeb = url.parse (
  'http://undeva.info:8080/oferta/jucarii/produs/?nume=Tux&marime=17#descriere',
  true     // genereaza un obiect 'query' ce include campurile din querystring
);
console.log (adresaWeb);

if (adresaWeb['query'].marime > 13) {
  console.log ('Jucaria e in regula.');
} else {
  console.log ('Jucaria e stricata.');
}
(infoiasi)$ node url.js
{ protocol:     'http:',




                                                                          Dr. Sabin Buragawww.purl.org/net/busaco
  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.
node.js: module – net




                                                      Dr. Sabin Buragawww.purl.org/net/busaco
Crearea de aplicatii Internet – modulul net

                partea de server:

                   createServer()
                          +
                  clasa net.Server
metode: listen() close() address() getConnections()
  evenimente: listening connection close error
node.js: module – net




                                              Dr. Sabin Buragawww.purl.org/net/busaco
Crearea de aplicatii Internet – modulul net

              partea de client:

                  connect()
             createConnection()
node.js: module – net




                                                                Dr. Sabin Buragawww.purl.org/net/busaco
    Crearea de aplicatii 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

        proprietati utile: localAddress localPort
remoteAddress remotePort bytesRead bytesWritten bufferSize
node.js: module – fs




                                              Dr. Sabin Buragawww.purl.org/net/busaco
Acces la sistemul de fisiere via modulul fs

           metode folosite uzual:

          open() read() write() close()

       truncate() stat() chmod() rename()

        isFile() isDirectory() isSocket()
Dr. Sabin Buragawww.purl.org/net/busaco
pentru detalii, a se consulta
  documentatia oficiala

      in acest caz, vezi
 http://nodejs.org/api/fs.html
node.js: module – fs




                                                        Dr. Sabin Buragawww.purl.org/net/busaco
  Acces la sistemul de fisiere via modulul fs



        studiu de caz (Victor Porof, 2013):
  generare de liste de melodii via iTunes si Last.fm

         https://github.com/victorporof/plgen

(ilustreaza si maniera de creare a modulelor proprii)
node.js: fluxuri de date




                                                        Dr. Sabin Buragawww.purl.org/net/busaco
       Accesul la date poate fi realizat
    prin intermediul fluxurilor (streams)


   abstractizeaza accesul la date stocate partial
             (partially buffered data)

emit evenimente ce pot fi tratate de codul aplicatiei
node.js: fluxuri de date




                                                            Dr. Sabin Buragawww.purl.org/net/busaco
        Accesul la date poate fi realizat
     prin 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
node.js: fluxuri de date




                                                            Dr. Sabin Buragawww.purl.org/net/busaco
        Accesul la date poate fi realizat
     prin 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 data end error
node.js: fluxuri de date




                                                            Dr. Sabin Buragawww.purl.org/net/busaco
        Accesul la date poate fi realizat
     prin 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()
node.js: fluxuri de date




                                                             Dr. Sabin Buragawww.purl.org/net/busaco
         Accesul la date poate fi realizat
      prin 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
node.js: fluxuri de date




                                                             Dr. Sabin Buragawww.purl.org/net/busaco
         Accesul la date poate fi realizat
      prin 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
node.js: fluxuri de date




                                                             Dr. Sabin Buragawww.purl.org/net/busaco
         Accesul la date poate fi realizat
      prin 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

          ofera metodele write() end() destroy()
// Program ce preia ceea ce tasteaza utilizatorul la intrarea standard
// si scrie intr-un fisier – conform M. Takada (2012)
var fs = require ('fs');




                                                                         Dr. Sabin Buragawww.purl.org/net/busaco
var fisier = fs.createWriteStream ('./spion.txt');

// la aparitia datelor, le scriem in fisier
process.stdin.on ('data', function (date) { fisier.write (date); } );

// tratam evenimentul de terminare a fluxului
process.stdin.on ('end', function() { fisier.end (); } );

// "reactivam" intrarea standard; implicit, e in starea 'paused'
process.stdin.resume ();


 obiectul process e global – detalii la http://nodejs.org/api/process.html
node.js: rulare temporizata




                                                 Dr. Sabin Buragawww.purl.org/net/busaco
Se poate planifica executia codului JavaScript



         recurgerea la functiile globale
                 setTimeout ()
                clearTimeout ()
                  setInterval ()
                 clearInterval()
// cream un server Web care trimite fiecarui client secventa valorilor unui contor
var server = http.createServer ().listen (8080, '127.0.0.1');

// stabilim un comportament la aparitia evenimentului 'request' (cerere de la un client)




                                                                                              Dr. Sabin Buragawww.purl.org/net/busaco
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 ( // generam 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);     // stergem intervalul
          raspuns.end ();               // inchidem fluxul de raspuns
          console.log ('Am trimis raspuns clientului ' + cerere.headers['user-agent']);
      }
    }, 1000);                           // cod rulat la interval de 1000 milisec.
});
Cerere de la clientul … Gecko/20100101 Firefox/19.0
Contorul are valoarea 0
Contorul are valoarea 1
Contorul are valoarea 2




                                                                            Dr. Sabin Buragawww.purl.org/net/busaco
Contorul are valoarea 3
Cerere de la clientul (… MSIE 10.0; Windows NT 6.1; Trident/6.0)
Contorul are valoarea 4
Contorul are valoarea 0                                  codul este rulat
Contorul are valoarea 5
Contorul are valoarea 1
                                                               asincron
Contorul are valoarea 6
Am trimis raspuns clientului … Gecko/20100101 Firefox/19.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 (… MSIE 10.0; Windows NT 6.1; Trident/6.0)
Cerere de la clientul … Gecko/20100101 Firefox/19.0
Contorul are valoarea 0
Contorul are valoarea 1
Contorul are valoarea 2




                                                                          Dr. Sabin Buragawww.purl.org/net/busaco
Contorul are valoarea 3
Cerere de la clientul (… MSIE 10.0; Windows NT 6.1; Trident/6.0)
Contorul are valoarea 4
Contorul are valoarea 0
Contorul are valoarea 5
Contorul are valoarea 1
Contorul are valoarea 6
Am trimis raspuns clientului … Gecko/20100101 Firefox/19.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 (… MSIE 10.0; Windows NT 6.1; Trident/6.0)

     browser-ul va astepta ca intreaga secventa de valori
   de ce?       sa fie trimisa de catre server
node.js: evenimente




                                                     Dr. Sabin Buragawww.purl.org/net/busaco
Emiterea (lansarea) si tratarea (prinderea)
evenimentelor specificate de programator
    se realizeaza via event.EventEmitter


clasa utilizata intern de multe biblioteci de baza


         http://nodejs.org/api/events.html
node.js: module externe




                                                             Dr. Sabin Buragawww.purl.org/net/busaco
Functia require () specifica utilizarea unui modul Node.js


module disponibile on-line (instalate via utilitarul npm)

  instalare globala a unui modul: npm install modul –g
         listarea modulelor existente: npm list
        cautarea unui modul: npm search modul
      eliminarea unui modul: npm uninstall modul
      actualizarea unui modul: npm update modul
node.js: module – node-sqlite-purejs




                                                         Dr. Sabin Buragawww.purl.org/net/busaco
                   Exemplificare:

     utilizarea modulului node-sqlite-purejs
pentru operatii cu baze de date relationale SQLite


            nu depinde de alte module

detalii la http://npmjs.org/package/node-sqlite-purejs
var sql = require ('node-sqlite-purejs');

var nume = [ 'Tuxy', 'Pingou', 'Ux', 'Ping', 'Ingu', // nume fictive de pinguini
               'Nes', 'Xut', 'Nipu', 'Guin', 'Esc' ];




                                                                                Dr. Sabin Buragawww.purl.org/net/busaco
// operatii SQL uzuale: creare tabela, inserare date, interogare
sql.open ('./pinguini.sqlite', {}, function (eroare, bd) {
  bd.exec ('CREATE TABLE tucsi (id integer, nume text, varsta integer)');
  for (var id = 0; id < 10; id++) { // inseram date (varsta e generata aleatoriu)
    bd.exec ('INSERT INTO tucsi VALUES (' + id + ', "'
     + nume[id] + '", ' + Math.round (Math.random () * 60) + ');');
  };

  // preluam pinguinii adulti
  bd.exec ("SELECT * FROM tucsi WHERE varsta >= 18 ORDER BY nume;",
    function (eroare, rezultate) { console.log (rezultate); }
  );
  }
);
node.js: module – studiu de caz




                                                   Dr. Sabin Buragawww.purl.org/net/busaco
Dorim sa realizam un mini-robot care proceseaza
continutul diverselor resurse disponibile pe Web


         rol de client pentru un server Web

      prelucreaza codul HTMLWeb scrapping
         (metode consacrate: DOM sau SAX)
var http    = require ('http');
var qs      = require ('querystring');
var xpath   = require ('xpath');
var dom     = require ('xmldom').DOMParser;




                                                                                                Dr. Sabin Buragawww.purl.org/net/busaco
// de exemplu, dorim sa obtinem reprezentarea corespunzatoare resursei
// de la http://www.php.net/manual-lookup.php?pattern=cookie&scope=quickref
var param = {                           // stabilim parametrii cererii HTTP
   host: 'www.php.net', port: 80, method: 'GET',
   path: '/manual-lookup.php' + '?' + qs.stringify ({ pattern: 'cookie', scope: 'quickref' })
};

var cerere = http.get (param, function (raspuns) {
 var rezultat = '';                     // raspunsul poate sosi in fragmente de date
 raspuns.on ('data', function (date) { // tratam evenimentul privitor la aparitia datelor
    rezultat += date;
 });
 raspuns.on ('end', function() {       // tratam evenimentul de finalizare a transferului
    console.log (procesareHTML (rezultat));
 });
});                                              conectare la un server Web
// realizeaza procesarea dorita (Web scrapping)
function procesareHTML (document) {




                                                                         Dr. Sabin Buragawww.purl.org/net/busaco
  var adrese = [];
  // instantiem un procesor DOM
  var doc = new dom().parseFromString (document);
  // selectam via o expresie XPath elementele <a> incluse in <li>
  var noduri = xpath.select ("//li/a", doc);
  // obtinem valoarea atributului 'href' (URL-ul)
  for (var i = 0; i < noduri.length; i++) {
    adrese.push (noduri[i].getAttribute ('href')); // plasam in tablou
  }
  return (adrese);
}


                     procesare document cu DOM si XPath
node.js: framework-uri web




                                                  Dr. Sabin Buragawww.purl.org/net/busaco
Uzual, incurajeaza dezvoltarea de aplicatii Web
      in care interactiunea cu utilizatorul
       se realizeaza intr-o singura pagina

         realtime single-page Web apps
node.js: framework-uri web




                                                      Dr. Sabin Buragawww.purl.org/net/busaco
             Alte facilitati notabile:

          MVC (Model-View-Controller)
transfer de date in timp-real – e.g., via Socket.IO
        servicii Web – paradigma REST
       suport pentru baze de date NoSQL
   template-uri de prezentare a continutului
node.js: framework-uri web – exemple




                                                          Dr. Sabin Buragawww.purl.org/net/busaco
                        Derby
                       Express
                      Flatiron
                        Geddy
                     Locomotive
                       Meteor
                        Mojito
                    SocketStream
                      TowerJS
          comparatii (Tyler Renelle, august 2012):
   http://ocdevel.com/blog/nodejs-frameworks-comparison
node.js: utilizari pragmatice




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
Deservire a unui volum mare de conexiuni concurente
 cu necesar minim de resurse (procesor, memorie)
                intr-un singur proces

Procesare in timp-real a datelor JSON oferite de API-uri

Dezvoltare rapida de servicii Web sau API-uri conform
 paradigmei REST (REpresentational State Transfer)

   Aplicatii oferind fluxuri de date (streaming data)
de studiat




                                                              Dr. Sabin Buragawww.purl.org/net/busaco
           Situl Node.js oficial – http://nodejs.org/

    M. Takada, Mixu’s Node Book – http://book.mixu.net/

      Comunitatea Node.js – http://docs.nodejitsu.com/

Resurse Node.js – http://github.com/joyent/node/wiki/Resources

 Ontwik Node.js Videos – http://ontwik.com/category/nodejs/
de studiat




                                                           Dr. Sabin Buragawww.purl.org/net/busaco
M. Kiessling, Node Beginner Book – www.nodebeginner.org

  D. Howard, Node.js for PHP Developers, O’Reilly, 2012

P. Teixeira, Professional Node.js: Building JavaScript-based
         Scalable Software, John Wiley & Sons, 2013

  M. Amundsen, Building Hypermedia APIs with HTML5
              and Node, O’Reilly, 2012

           How To Node – http://howtonode.org/
rezumat




                                              Dr. Sabin Buragawww.purl.org/net/busaco
aplicatii Web la nivel de server cu node.js
?



Dr. Sabin Buragawww.purl.org/net/busaco

Weitere ähnliche Inhalte

Was ist angesagt?

CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptSabin Buraga
 
Esență de JavaScript pentru novici
Esență de JavaScript pentru noviciEsență de JavaScript pentru novici
Esență de JavaScript pentru noviciSabin Buraga
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientSabin Buraga
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Sabin Buraga
 
O lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLO lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLSabin Buraga
 
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Sabin Buraga
 
Suita de tehnologii HTML5
Suita de tehnologii HTML5Suita de tehnologii HTML5
Suita de tehnologii HTML5Sabin Buraga
 
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)Sabin Buraga
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSabin Buraga
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...Sabin Buraga
 
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...Sabin Buraga
 
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHPWeb 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHPSabin Buraga
 
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeCLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeSabin Buraga
 
Căutarea resurselor Web
Căutarea resurselor WebCăutarea resurselor Web
Căutarea resurselor WebSabin Buraga
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Sabin Buraga
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Sabin Buraga
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsSabin Buraga
 
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluCLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluSabin Buraga
 

Was ist angesagt? (20)

CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScriptCLIW 2015-2016 (7/13) Limbajul de programare JavaScript
CLIW 2015-2016 (7/13) Limbajul de programare JavaScript
 
HTML5? HTML5!
HTML5? HTML5!HTML5? HTML5!
HTML5? HTML5!
 
Esență de JavaScript pentru novici
Esență de JavaScript pentru noviciEsență de JavaScript pentru novici
Esență de JavaScript pentru novici
 
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de clientCLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
CLIW 2015-2016 (12/13) Performanța aplicaţiilor Web la nivel de client
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
 
O lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLO lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTML
 
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
 
Suita de tehnologii HTML5
Suita de tehnologii HTML5Suita de tehnologii HTML5
Suita de tehnologii HTML5
 
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
Foi de stiluri CSS – concepte esențiale (...și puțin mai mult)
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
 
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
CLIW 2015-2016 (4/13) Design Web. Proiectarea siturilor Web. Design Web respo...
 
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
 
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHPWeb 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
 
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţialeCLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
CLIW 2017-2018 (5/12) Limbajul de programare JavaScript. Aspecte esenţiale
 
Căutarea resurselor Web
Căutarea resurselor WebCăutarea resurselor Web
Căutarea resurselor Web
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
 
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansambluCLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
CLIW 2015-2016 (5/13) Vizualizarea datelor – o privire de ansamblu
 

Ähnlich wie Node.js: aspecte esențiale

WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...Sabin Buraga
 
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsWADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsSabin Buraga
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSabin Buraga
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebSabin Buraga
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSabin Buraga
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebSabin Buraga
 
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5Sabin Buraga
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebSabin Buraga
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSabin Buraga
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Sabin Buraga
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Sabin Buraga
 
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Sabin Buraga
 
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
Prezentare USO - Web Application Integration
Prezentare USO - Web Application IntegrationPrezentare USO - Web Application Integration
Prezentare USO - Web Application Integrationmihneasim
 
Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...
Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...
Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...Codecamp Romania
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Sabin Buraga
 
Instalare si administrare site grid
Instalare si administrare site gridInstalare si administrare site grid
Instalare si administrare site gridalexstanciu
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"Sabin Buraga
 

Ähnlich wie Node.js: aspecte esențiale (20)

WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
 
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsWADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
 
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5
 
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
 
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2017-2018 (8/12) Ingineria dezvoltării aplicaţiilor JavaScript
 
Webpack
Webpack Webpack
Webpack
 
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScriptCLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
CLIW 2014—2015 (9/12): Ingineria dezvoltării aplicaţiilor JavaScript
 
Prezentare USO - Web Application Integration
Prezentare USO - Web Application IntegrationPrezentare USO - Web Application Integration
Prezentare USO - Web Application Integration
 
Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...
Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...
Remus Pereni - Remus Pereni - JavaScript, from dark ages to renaissance, the ...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
 
Instalare si administrare site grid
Instalare si administrare site gridInstalare si administrare site grid
Instalare si administrare site grid
 
Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"
 

Mehr von Sabin Buraga

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleSabin Buraga
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebSabin Buraga
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebSabin Buraga
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Sabin Buraga
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelSabin Buraga
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Sabin Buraga
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTSabin Buraga
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Sabin Buraga
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeSabin Buraga
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSabin Buraga
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.Sabin Buraga
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)Sabin Buraga
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)Sabin Buraga
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSabin Buraga
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...Sabin Buraga
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...Sabin Buraga
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesSabin Buraga
 

Mehr von Sabin Buraga (20)

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturale
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma REST
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor Web
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
 

Node.js: aspecte esențiale

  • 1. Tehnologii Web Dr. Sabin Buragawww.purl.org/net/busaco Programare Web – supliment node.js: aspecte esentiale
  • 2. Dr. Sabin Buragawww.purl.org/net/busaco “Cine a vazut vreodata o bijuterie frumos cizelata de bijutier cu ajutorul ciocanului?” Jan Amos Comenius
  • 3. node.js: (pre)istoric Dr. Sabin Buragawww.purl.org/net/busaco Brendan Eich dezvolta limbajul JavaScript (1995) JavaScript inclus in browser-ul Netscape Navigator (1996) Netscape propune Livewire – JS la nivel de server (1996)  prima editie a standardului ECMAScript (1997)
  • 4. node.js: (pre)istoric Dr. Sabin Buragawww.purl.org/net/busaco Microsoft include obiectul XMLHttpRequest (1999) transfer asincron via Ajax (2005) JSON – JavaScript Object Notation (2000) format simplist pentru interschimb de date aparitia bibliotecii jQuery (2005) abstractizeaza & simplifica manipularea paginilor Web JS (ActionScript) pentru Adobe Creative Suite (2005)
  • 5. node.js: (pre)istoric Dr. Sabin Buragawww.purl.org/net/busaco JavaScript in contextul bazelor de date – CouchDB (2006) Apple ofera WebKit bazat pe KHTML de la KDE (2007) disponibil in regim open source la www.webkit.org Google Chrome – cod JS performant via V8 (2008) ofera premisele crearii de aplicatii Web complexe rulate in cadrul navigatorului Web documentatii de referinta oferite de Mozilla (2011) http://developer.mozilla.org/
  • 6. node.js: istoric Dr. Sabin Buragawww.purl.org/net/busaco Ryan Dahl creeaza Node.js (2009) http://nodejs.org/ Node.js ruleaza pe masini respectand standardul POSIX + pe calculatoare Windows (2011) Node.js este adoptat de industrie e.g., Cloud9 IDE, eBay, LinkedIn, Storify, Yahoo! (2012) Node.js 0.10 – versiunea actuala (2013)
  • 7. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco “Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.”
  • 8. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco Permite dezvoltarea de aplicatii Web la nivel de server in limbajul JavaScript recurge la V8 – procesor (interpretor) JavaScript creat de Google si disponibil liber https://code.google.com/p/v8/
  • 9. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco Ofera suport pentru cele mai importante protocoale Web si Internet HTTP (HyperText Transfer Protocol) DNS (Domain Name System) TLS (Transport Layer Security) functionalitati de nivel scazut (socket-uri TCP)
  • 10. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco Operatiile de intrare/iesire sunt asincrone fiecare cerere (operatie) adresata aplicatiei noastre – e.g., acces la disc, la retea, la alt proces – poate avea atasata o functie de tratare a unui eveniment specific evented I/O
  • 11. cod JS executat de cod JS rulat pe partea client (browser Web) de server (node.js) procesare Dr. Sabin Buragawww.purl.org/net/busaco asteapta si trateaza evenimente de bazata pe asteapta si trateaza interactiune evenimente cereri (evenimente) (onclick, onmouseover, evented/ provenite de la client(i) onkeypressed,…) event-based programul trebuie sa fie programul trebuie sa fie responsiv atunci cand responsiv atunci cand asteapta incarcarea asincronism asteapta incarcarea datelor de pe retea (e.g., operatii datelor locale/externe (e.g., JSON, XML, imagini, neblocante) (provenite din baze de video) via Ajax/Comet date, fisiere, ori socket-uri Web servicii Web, API-uri,…) adaptare dupa Ben Sheldon (2012): http://www.island94.org/?p=3066
  • 12. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco O aplicatie node.js ruleaza intr-un singur proces codul JavaScript nu este executat paralel, dar trateaza in mod asincron diverse evenimente I/O single-process event loop
  • 13. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco O aplicatie node.js ruleaza intr-un singur proces deosebire esentiala fata de serverele de aplicatii Web traditionale ce recurg la servere multi-process/threaded
  • 14. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco O aplicatie node.js ruleaza intr-un singur proces server tipic server node.js adaptare dupa Ben Sheldon (2012): http://www.island94.org/?p=3066
  • 15. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco Mediul node.js e disponibil gratuit – open source – pentru platformele UNIX/Linux, Windows, Mac OS X http://nodejs.org/download/
  • 16. functionalitatile suplimentare sunt oferite de module administrate Dr. Sabin Buragawww.purl.org/net/busaco via npm https://npmjs.org/
  • 17. node.js: caracterizare Dr. Sabin Buragawww.purl.org/net/busaco Ofera un mediu de executie in linia de comanda, pe baza unor biblioteci C++ si a procesorului V8 (infoiasi)$ node program.js
  • 18. node.js: exemplu Dr. Sabin Buragawww.purl.org/net/busaco Un prim program care emite saluturi // salutari.js: un program (de sine-statator) care emite un salut console.log ('Salutari banale din Node.js'); invocarea unei metode oferita de un obiect predefinit
  • 19. node.js: exemplu Dr. Sabin Buragawww.purl.org/net/busaco Un prim program care emite saluturi // salutari.js: un program (de sine-statator) care emite un salut console.log ('Salutari banale din Node.js'); (infoiasi)$ node salutari.js Salutari banale din Node.js
  • 20. // Un program JavaScript care saluta toti posibilii sai clienti Web var http = require ('http'); // folosim 'http', un modul Node predefinit http.createServer ( // cream un server Web Dr. Sabin Buragawww.purl.org/net/busaco // functie anonima ce trateaza o cerere si trimite un raspuns function (cerere, raspuns) { // afisam la consola serverului mesaje de diagnostic console.log ('Am primit o cerere...'); // stabilim valori pentru diverse campuri-antet HTTP raspuns.writeHead (200, { 'Content-Type': 'text/html' }); // emitem raspunsul propriu-zis conform tipului MIME (cod HTML) raspuns.end ('<html><body><h1>Salutari…</h1></body></html>'); } // serverul asculta cereri la portul 8080 al masinii locale ).listen (8080, "127.0.0.1"); console.log ('Serverul creat asteapta cereri la http://127.0.0.1:8080/');
  • 21. programul JavaScript creat functioneaza ca un server Web pentru fiecare cerere emisa de un posibil client (browser, aplicatie desktop etc.) conform modelului client/server Dr. Sabin Buragawww.purl.org/net/busaco pe partea de server – asteptare cereri (infoiasi)$ node salutari-web.js Serverul creat asteapta cereri la http://127.0.0.1:8080/ Am primit o cerere... Am primit o cerere...
  • 22. programul JavaScript creat functioneaza ca un server Web pentru fiecare cerere emisa de un posibil client (browser, aplicatie desktop etc.) conform modelului client/server Dr. Sabin Buragawww.purl.org/net/busaco pe partea de server – asteptare cereri (infoiasi)$ 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 – receptionare raspuns conform cererii GET emise de un program desktop si de un navigator Web (infoiasi)$ 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>
  • 23. // Un program JS care implementeaza un client pentru serviciul de salut var http = require ('http'); http.get ('http://127.0.0.1:8080/', // emite o cerere HTTP Dr. Sabin Buragawww.purl.org/net/busaco function (raspuns) { console.log ('Am primit raspuns de la server -- cod HTTP: ' + raspuns.statusCode); // statusCode: 200, 404,… }) // tratam diverse evenimente .on ('error', // eroare function (e) { console.log ('Eroare: ' + e.message); }) .on ('response', // receptare raspuns de la server function (raspuns) { // exista date de procesat raspuns.on ('data', function (date) { console.log ('Continut receptionat: ' + date); }); } );
  • 24. node.js: module Dr. Sabin Buragawww.purl.org/net/busaco Functia require () specifica utilizarea unui modul Node.js module predefinite (built-in): privitoare la Web – http, https, url, querystring referitoare la fisiere – fs, path vizand reteaua – net, dns, dgram, tls, resurse privind sistemul de operare – os, child_process alte aspecte de interes – buffer, console, util, crypto
  • 25. node.js: module – http Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea de aplicatii Web via modulul http functionalitati HTTP de baza crearea unui server Web: createServer() realizarea de cereri HTTP: request() get()
  • 26. node.js: module – http Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea de aplicatii 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.
  • 27. node.js: module – http Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea de aplicatii Web via modulul http raspuns emis de server – clasa http.ServerResponse metode uzuale: writeHead() getHeader() removeHeader() write() end() etc. evenimente: close clientError proprietati folositoare: statusCode headersSent
  • 28. node.js: module – http Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea de aplicatii Web via modulul http cerere emisa de client – clasa http.ClientRequest metode uzuale: write() abort() end() setTimeout() setSocketKeepAlive() etc. evenimente ce pot fi tratate: response connect continue socket etc.
  • 29. node.js: module – http Dr. Sabin Buragawww.purl.org/net/busaco Dezvoltarea de aplicatii Web via modulul http mesaj vehiculat – clasa http.IncomingMessage metode: setEncoding() setTimeout() pause() resume() evenimente ce pot fi tratate: data end close proprietati de interes: httpVersion headers method url statusCode socket
  • 30. node.js: module – url Dr. Sabin Buragawww.purl.org/net/busaco Procesarea adreselor Web via modulul url metode oferite: parse() format() resolve() http://nodejs.org/api/url.html
  • 31. var url = require ('url'); Dr. Sabin Buragawww.purl.org/net/busaco var adresaWeb = url.parse ( 'http://undeva.info:8080/oferta/jucarii/produs/?nume=Tux&marime=17#descriere', true // genereaza un obiect 'query' ce include campurile din querystring ); console.log (adresaWeb); if (adresaWeb['query'].marime > 13) { console.log ('Jucaria e in regula.'); } else { console.log ('Jucaria e stricata.'); }
  • 32. (infoiasi)$ node url.js { protocol: 'http:', Dr. Sabin Buragawww.purl.org/net/busaco 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.
  • 33. node.js: module – net Dr. Sabin Buragawww.purl.org/net/busaco Crearea de aplicatii Internet – modulul net partea de server: createServer() + clasa net.Server metode: listen() close() address() getConnections() evenimente: listening connection close error
  • 34. node.js: module – net Dr. Sabin Buragawww.purl.org/net/busaco Crearea de aplicatii Internet – modulul net partea de client: connect() createConnection()
  • 35. node.js: module – net Dr. Sabin Buragawww.purl.org/net/busaco Crearea de aplicatii 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 proprietati utile: localAddress localPort remoteAddress remotePort bytesRead bytesWritten bufferSize
  • 36. node.js: module – fs Dr. Sabin Buragawww.purl.org/net/busaco Acces la sistemul de fisiere via modulul fs metode folosite uzual: open() read() write() close() truncate() stat() chmod() rename() isFile() isDirectory() isSocket()
  • 37. Dr. Sabin Buragawww.purl.org/net/busaco pentru detalii, a se consulta documentatia oficiala in acest caz, vezi http://nodejs.org/api/fs.html
  • 38. node.js: module – fs Dr. Sabin Buragawww.purl.org/net/busaco Acces la sistemul de fisiere via modulul fs studiu de caz (Victor Porof, 2013): generare de liste de melodii via iTunes si Last.fm https://github.com/victorporof/plgen (ilustreaza si maniera de creare a modulelor proprii)
  • 39. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin intermediul fluxurilor (streams) abstractizeaza accesul la date stocate partial (partially buffered data) emit evenimente ce pot fi tratate de codul aplicatiei
  • 40. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin 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
  • 41. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin 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 data end error
  • 42. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin 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()
  • 43. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin 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
  • 44. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin 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
  • 45. node.js: fluxuri de date Dr. Sabin Buragawww.purl.org/net/busaco Accesul la date poate fi realizat prin 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 ofera metodele write() end() destroy()
  • 46. // Program ce preia ceea ce tasteaza utilizatorul la intrarea standard // si scrie intr-un fisier – conform M. Takada (2012) var fs = require ('fs'); Dr. Sabin Buragawww.purl.org/net/busaco var fisier = fs.createWriteStream ('./spion.txt'); // la aparitia datelor, le scriem in fisier process.stdin.on ('data', function (date) { fisier.write (date); } ); // tratam evenimentul de terminare a fluxului process.stdin.on ('end', function() { fisier.end (); } ); // "reactivam" intrarea standard; implicit, e in starea 'paused' process.stdin.resume (); obiectul process e global – detalii la http://nodejs.org/api/process.html
  • 47. node.js: rulare temporizata Dr. Sabin Buragawww.purl.org/net/busaco Se poate planifica executia codului JavaScript recurgerea la functiile globale setTimeout () clearTimeout () setInterval () clearInterval()
  • 48. // cream un server Web care trimite fiecarui client secventa valorilor unui contor var server = http.createServer ().listen (8080, '127.0.0.1'); // stabilim un comportament la aparitia evenimentului 'request' (cerere de la un client) Dr. Sabin Buragawww.purl.org/net/busaco 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 ( // generam 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); // stergem intervalul raspuns.end (); // inchidem fluxul de raspuns console.log ('Am trimis raspuns clientului ' + cerere.headers['user-agent']); } }, 1000); // cod rulat la interval de 1000 milisec. });
  • 49. Cerere de la clientul … Gecko/20100101 Firefox/19.0 Contorul are valoarea 0 Contorul are valoarea 1 Contorul are valoarea 2 Dr. Sabin Buragawww.purl.org/net/busaco Contorul are valoarea 3 Cerere de la clientul (… MSIE 10.0; Windows NT 6.1; Trident/6.0) Contorul are valoarea 4 Contorul are valoarea 0 codul este rulat Contorul are valoarea 5 Contorul are valoarea 1 asincron Contorul are valoarea 6 Am trimis raspuns clientului … Gecko/20100101 Firefox/19.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 (… MSIE 10.0; Windows NT 6.1; Trident/6.0)
  • 50. Cerere de la clientul … Gecko/20100101 Firefox/19.0 Contorul are valoarea 0 Contorul are valoarea 1 Contorul are valoarea 2 Dr. Sabin Buragawww.purl.org/net/busaco Contorul are valoarea 3 Cerere de la clientul (… MSIE 10.0; Windows NT 6.1; Trident/6.0) Contorul are valoarea 4 Contorul are valoarea 0 Contorul are valoarea 5 Contorul are valoarea 1 Contorul are valoarea 6 Am trimis raspuns clientului … Gecko/20100101 Firefox/19.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 (… MSIE 10.0; Windows NT 6.1; Trident/6.0) browser-ul va astepta ca intreaga secventa de valori de ce? sa fie trimisa de catre server
  • 51. node.js: evenimente Dr. Sabin Buragawww.purl.org/net/busaco Emiterea (lansarea) si tratarea (prinderea) evenimentelor specificate de programator se realizeaza via event.EventEmitter clasa utilizata intern de multe biblioteci de baza http://nodejs.org/api/events.html
  • 52. node.js: module externe Dr. Sabin Buragawww.purl.org/net/busaco Functia require () specifica utilizarea unui modul Node.js module disponibile on-line (instalate via utilitarul npm) instalare globala a unui modul: npm install modul –g listarea modulelor existente: npm list cautarea unui modul: npm search modul eliminarea unui modul: npm uninstall modul actualizarea unui modul: npm update modul
  • 53. node.js: module – node-sqlite-purejs Dr. Sabin Buragawww.purl.org/net/busaco Exemplificare: utilizarea modulului node-sqlite-purejs pentru operatii cu baze de date relationale SQLite nu depinde de alte module detalii la http://npmjs.org/package/node-sqlite-purejs
  • 54. var sql = require ('node-sqlite-purejs'); var nume = [ 'Tuxy', 'Pingou', 'Ux', 'Ping', 'Ingu', // nume fictive de pinguini 'Nes', 'Xut', 'Nipu', 'Guin', 'Esc' ]; Dr. Sabin Buragawww.purl.org/net/busaco // operatii SQL uzuale: creare tabela, inserare date, interogare sql.open ('./pinguini.sqlite', {}, function (eroare, bd) { bd.exec ('CREATE TABLE tucsi (id integer, nume text, varsta integer)'); for (var id = 0; id < 10; id++) { // inseram date (varsta e generata aleatoriu) bd.exec ('INSERT INTO tucsi VALUES (' + id + ', "' + nume[id] + '", ' + Math.round (Math.random () * 60) + ');'); }; // preluam pinguinii adulti bd.exec ("SELECT * FROM tucsi WHERE varsta >= 18 ORDER BY nume;", function (eroare, rezultate) { console.log (rezultate); } ); } );
  • 55. node.js: module – studiu de caz Dr. Sabin Buragawww.purl.org/net/busaco Dorim sa realizam un mini-robot care proceseaza continutul diverselor resurse disponibile pe Web rol de client pentru un server Web prelucreaza codul HTMLWeb scrapping (metode consacrate: DOM sau SAX)
  • 56. var http = require ('http'); var qs = require ('querystring'); var xpath = require ('xpath'); var dom = require ('xmldom').DOMParser; Dr. Sabin Buragawww.purl.org/net/busaco // de exemplu, dorim sa obtinem reprezentarea corespunzatoare resursei // de la http://www.php.net/manual-lookup.php?pattern=cookie&scope=quickref var param = { // stabilim parametrii cererii HTTP host: 'www.php.net', port: 80, method: 'GET', path: '/manual-lookup.php' + '?' + qs.stringify ({ pattern: 'cookie', scope: 'quickref' }) }; var cerere = http.get (param, function (raspuns) { var rezultat = ''; // raspunsul poate sosi in fragmente de date raspuns.on ('data', function (date) { // tratam evenimentul privitor la aparitia datelor rezultat += date; }); raspuns.on ('end', function() { // tratam evenimentul de finalizare a transferului console.log (procesareHTML (rezultat)); }); }); conectare la un server Web
  • 57. // realizeaza procesarea dorita (Web scrapping) function procesareHTML (document) { Dr. Sabin Buragawww.purl.org/net/busaco var adrese = []; // instantiem un procesor DOM var doc = new dom().parseFromString (document); // selectam via o expresie XPath elementele <a> incluse in <li> var noduri = xpath.select ("//li/a", doc); // obtinem valoarea atributului 'href' (URL-ul) for (var i = 0; i < noduri.length; i++) { adrese.push (noduri[i].getAttribute ('href')); // plasam in tablou } return (adrese); } procesare document cu DOM si XPath
  • 58. node.js: framework-uri web Dr. Sabin Buragawww.purl.org/net/busaco Uzual, incurajeaza dezvoltarea de aplicatii Web in care interactiunea cu utilizatorul se realizeaza intr-o singura pagina realtime single-page Web apps
  • 59. node.js: framework-uri web Dr. Sabin Buragawww.purl.org/net/busaco Alte facilitati notabile: MVC (Model-View-Controller) transfer de date in timp-real – e.g., via Socket.IO servicii Web – paradigma REST suport pentru baze de date NoSQL template-uri de prezentare a continutului
  • 60. node.js: framework-uri web – exemple Dr. Sabin Buragawww.purl.org/net/busaco Derby Express Flatiron Geddy Locomotive Meteor Mojito SocketStream TowerJS comparatii (Tyler Renelle, august 2012): http://ocdevel.com/blog/nodejs-frameworks-comparison
  • 61. node.js: utilizari pragmatice Dr. Sabin Buragawww.purl.org/net/busaco Deservire a unui volum mare de conexiuni concurente cu necesar minim de resurse (procesor, memorie) intr-un singur proces Procesare in timp-real a datelor JSON oferite de API-uri Dezvoltare rapida de servicii Web sau API-uri conform paradigmei REST (REpresentational State Transfer) Aplicatii oferind fluxuri de date (streaming data)
  • 62. de studiat Dr. Sabin Buragawww.purl.org/net/busaco Situl Node.js oficial – http://nodejs.org/ M. Takada, Mixu’s Node Book – http://book.mixu.net/ Comunitatea Node.js – http://docs.nodejitsu.com/ Resurse Node.js – http://github.com/joyent/node/wiki/Resources Ontwik Node.js Videos – http://ontwik.com/category/nodejs/
  • 63. de studiat Dr. Sabin Buragawww.purl.org/net/busaco M. Kiessling, Node Beginner Book – www.nodebeginner.org D. Howard, Node.js for PHP Developers, O’Reilly, 2012 P. Teixeira, Professional Node.js: Building JavaScript-based Scalable Software, John Wiley & Sons, 2013 M. Amundsen, Building Hypermedia APIs with HTML5 and Node, O’Reilly, 2012 How To Node – http://howtonode.org/
  • 64. rezumat Dr. Sabin Buragawww.purl.org/net/busaco aplicatii Web la nivel de server cu node.js