web-nodejs
web-nodejs
Tehnologii Web
a se considera și
Ingineria dezvoltării aplicaţiilor JavaScript
profs.info.uaic.ro/~busaco/teach/courses/staw/web-film.html#week7
Cum dezvoltăm cu JavaScript
aplicații Web la nivel de server?
github.com/nodejs/node
node.js
node program.js
node.js
recurge la V8
procesor – compilează + execută codul – ECMAScript
a single threaded execution JS engine
creat de Google, implementat în C++ și JS, disponibil liber
v8.dev
v8.dev/docs
node.js
utilizează libluv
bibliotecă multi-platformă disponibilă liber
axată pe efectuarea de operații I/O asincrone
implementare C++
libuv.org
node.js
docs.libuv.org/en/v1.x/design.html
node.js: caracterizare
evented I/O
cod JS executat de cod JS rulat pe partea
client (browser Web) de server (node.js)
procesare
nodejs.org/en/download/
npmjs.com
github.com/npm
node.js: caracterizare
detalii la docs.npmjs.com
node.js: exemplu
invocarea unei
metode oferită de
un obiect predefinit
node.js: exemplu
nodejs.org/en/docs/
devdocs.io/node/
atenție: o parte
dintre funcționalități
node.js: module sunt experimentale
metode uzuale:
listen() setTimeout() close()
metode uzuale:
writeHead() getHeader() removeHeader() write() end() etc.
metode uzuale:
write() abort() end() setTimeout() setSocketKeepAlive()
proprietăți de interes:
httpVersion headers method url statusCode socket
node.js: module – http
clase oferite:
URL() URLSearchParams()
nodejs.org/api/url.html
let adresaWeb = new URL
('http://undeva.info:8080/oferta/jucarii/produs/?nume=Tux&marime=17#oferta');
adresaWeb.host = 'acolo';
console.log (adresaWeb);
partea de server:
createServer()
+
clasa net.Server
metode: listen() close() address() getConnections()
evenimente: listening connection close error
proprietăți: listening maxConnections
node.js: module – net
partea de client:
connect()
createConnection()
node.js: module – net
clase importante:
fs.ReadStream – flux de citire
fs.WriteStream – flux de scriere
fs.Stats – informații despre un fișier
fs.FSWatcher – monitorizează schimbările dintr-un fișier
(obiecte de tip EventEmitter – evenimentul change)
fs.Dirent – element dintr-un director (directory entry)
node.js: module – fs
exemple:
openSync() readSync() writeSync() closeSync()
appendFileSync() chmodSync() unlinkSync() mkdirSync()
const http = require ("http");
const url = require ("url"); mini-server Web oferind
const path = require ("path"); fișiere statice stocate în 'public/'
const fs = require ("fs");
http.createServer ((cerere, raspuns) => {
detalii la nodejs.org/api/stream.html
node.js: fluxuri de date
Readable Streams Writable Streams
github.com/samerbuna/efficient-node
node.js: fluxuri de date
amănunte la nodejs.org/api/timers.html
// creăm un server Web care trimite fiecărui client secvența valorilor unui contor
let server = http.createServer ().listen (8080, '127.0.0.1');
let contor = 0;
let 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
});
Cerere de la clientul … Mozilla/5.0 (Windows NT 10.0 …) … Firefox/110.0
Contorul are valoarea 0
Contorul are valoarea 1
Contorul are valoarea 2
nodejs.org/api/events.html
const EventEmitter = require('events');
const cataclism = Symbol('©©©');
class Emițător extends EventEmitter {}
tutorial:
www.sitepoint.com/npm-guide/
node.js: module externe
amănunte la docs.npmjs.com
node.js: module – acces la baze de date
detalii la www.npmjs.com/package/sql.js
node.js: module – acces la baze de date
Sequalize
acces abstractizat via ORM (Object-Relational Mapping)
pentru servere relaționale: Postgres, MySQL, MariaDB,
SQLite și Microsoft SQL Server
sequelize.org
node.js: module – acces la baze de date
Objection.js – vincit.github.io/objection.js/
bazat pe Knex – a SQL query builder: knexjs.org
dev.to/mrscx/a-definitive-guide-to-sql-in-nodejs-with-objection-js-knex-part-1-4c2e
Bookshelf.js – bookshelfjs.org
tutorial: zetcode.com/javascript/bookshelf/
node.js: module – prelucrări HTML
github.com/jsdom/jsdom
node.js: module – prelucrări HTML
alternative la JSDOM:
nodejs.org/api/worker_threads.html
medium.com/lazy-engineering/node-worker-threads-b57a32d84845
event loop + worker thread pool
itnext.io/an-intro-to-node-js-that-you-may-have-missed-b175ef4277f7
node.js: pachete
docs.npmjs.com/creating-a-package-json-file
{
"name": "WebApp",
node.js: module – prelucrări HTML
"version": "1.0.0",
"main": "index.js",
docs.npmjs.com/cli/publish
node.js: pachete
expressjs.com
developer.mozilla.org/docs/Learn/Server-side/Express_Nodejs
.
├── app.js
├── bin
│ └── www
├── package.json
├── public conținut static destinat clientului
tutoriale:
MERN Stack
www.mongodb.com/mern-stack
MERN stack A to Z
blog.logrocket.com/mern-stack-tutorial/
node.js: framework-uri web
Adonis – adonisjs.com/docs/
Fastify – www.fastify.io/docs/latest/
Koa.js – github.com/koajs
Lad – github.com/ladjs/lad
Loopback – loopback.io/doc/
Nanoexpress – nanoexpress.js.org
Nest – docs.nestjs.com
Sails – sailsjs.com/documentation/concepts
node.js: framework-uri web
studii de caz:
www.pubnub.com/blog/tag/node-js/
node.js: utilizări pragmatice
exemplificări:
Node.js in Visual Studio Code
code.visualstudio.com/docs/nodejs/nodejs-tutorial
Node.js Tools for Visual Studio
visualstudio.microsoft.com/vs/features/node-js/
node.js: instrumente de dezvoltare
deno.land/manual
node.js: alternative
bun.sh/docs
Câteva studii
de caz concrete…
hackernoon.com/brief-history-of-how-we-develop-harperdb-pb3z33qr
node.js: exemplu
tech stack
desemnează mulțimea tehnologiilor – limbaje,
framework-uri, biblioteci, servere, soluții de interacțiune
cu utilizatorul, utilitare, metodologii etc. – pe care
un producător software le folosește
pentru a dezvolta o aplicație (Web, mobilă,…)
Dr. Sabin Buragaprofs.info.uaic.ro/~busaco
inspectarea
tehnologiilor folosite
de o aplicație Web
cu instrumentul
WhatRuns
stackshare.io/ebay/ebay/
node.js: exemplu
stackshare.io/udemy/udemy/