Lëshimi i Node.js 17.0, platformës për ekzekutimin e aplikacioneve rrjetore në gjuhën JavaScript. Node.js 17.0 i përket degës me mbështetje standarde, për të cilën do të lëshohen përditësime deri në qershor 2022. Në ditët në vijim do të përfundojë stabilizimi i degës Node.js 16, e cila do të marrë statusin LTS dhe do të mbështetet deri në prill 2024. Mbështetja për degën e kaluar LTS Node.js 14.0 do të vazhdojë deri në prill 2023, ndërsa mbështetja për degën e mëparshme LTS 12.0 deri në prill 2022.
Përmirësimet kryesore:
- Motorri V8 është azhurnuar në versionin 9.5.
- Продолжена реализация вариантов базового API, основанных на использовании интерфейса асинхронных вычислений Promise. В дополнение к ранее предложенным API Timers Promises и Streams Promises в Node.js 17.0 представлен API Readline Promise для построчного чтения данных с использованием модуля readline. import * as readline from ‘node:readline/promises’; import { stdin as input, stdout as output } from ‘process’; const rl = readline.createInterface({ input, output }); const answer = await rl.question(‘What do you think of Node.js?’); console.log(‘Thank you for your valuable feedback: ${answer}’); rl.close();
- Biblioteka OpenSSL e dhënë me paketën është azhurnuar në versionin 3.0 (përdoret fork quictls/openssl me mbështetje të aktivizuar për protokollin QUIC).
- Versioni i Node.js është siguruar në të dhënat e gjurmimit të stack-ut, të cilat shkaktohen në rast të gabimeve fatale që shkaktojnë përfundimin e aplikacionit.
Gjithashtu mund të përmenden dy dobësi të eliminuara në degët aktuale të Node.js (CVE-2021-22959, CVE-2021-22960), që mundësojnë sulme të klasës "HTTP Request Smuggling" (HRS), duke lejuar që, përmes dërgimit të kërkesave të formatuara në mënyrë të veçantë, të përfshihen në përmbajtjen e kërkesave të përdoruesve të tjerë, që trajtohen në të njëjtin rrjedh në mes të frontend-it dhe backend-it (për shembull, është e mundur të arrihet futur kodi JavaScript të dëmshëm në seancën e një përdoruesi tjetër). Detajet do të zbulohen më vonë, ndërsa deri tani dihet vetëm se problemet shkaktohen nga trajtimi i papërshtatshëm i hapësirave midis emrit të titullit HTTP dhe dy pikave, si dhe trajtimi i ndryshëm i karaktereve të rikthimit të karrocës dhe të rreshtit në blokun e parametrave, që përdoret për transferimin e trupit të kërkesës në pjesë në modin "chunked".
Përkujtojmë se platforma Node.js mund të përdoret si për mbështetje serverike të funksionimit të aplikacioneve Web, ashtu edhe për krijimin e programeve rrjetore të zakonshme klient-server. Për të zgjeruar funksionalitetin e aplikacioneve për Node.js është përgatitur një koleksion i madh modulash, ku mund të gjenden module me implementim. serverësh dhe klientë HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module për integrimin me framework-e të ndryshme web, trajtues të WebSocket dhe Ajax, lidhës për DB (MySQL, PostgreSQL, SQLite, MongoDB), motorë të templativëve, engine CSS, implementime të algoritmeve kriptografikë dhe sisteme autorizimi (OAuth), parserë XML.
Për të siguruar përpunimin e një numri të madh kërkesash paralel, Node.js përdor një model asinkron të ekzekutimit të kodit, i bazuar në trajtimin e ngjarjeve në modusin jo-bllokues dhe përcaktimin e handler-ave të callback. Metodat e mbështetura për multipleximin e lidhjeve përfshijnë epoll, kqueue, /dev/poll dhe select. Biblioteka libuv përdoret për multipleximin e lidhjeve, e cila është një shtresë mbi libev në sistemet Unix dhe mbi IOCP në Windows. Për krijimin e një puli të thread-eve, përdoret biblioteka libeio, ndërsa për ekzekutimin e kërkesave DNS në mod të jo-bllokues, është integruar c-ares. Të gjitha thirrjet sistemore qe shkaktojnë bllokim, ekzekutohen brenda pulit të thread-eve dhe më pas, ashtu si dhe handler-at e sinjalit, përcjellin rezultatin e punës së tyre pas një kanali të paemëruar (pipe). Ekzekutimi i kodit JavaScript sigurohet përmes përdorimit të motorit V8 të zhvilluar nga kompania Google (përveç kësaj, Microsoft po zhvillon një variant të Node.js me motorin Chakra-Core).
Në thelb, Node.js është e ngjashme me framework-et Perl AnyEvent, Ruby Event Machine, Python Twisted dhe implementimin e ngjarjeve në Tcl, por cikli i trajtimit të ngjarjeve (event loop) në Node.js është i fshehur nga zhvilluesi dhe përngjan me trajtimin e ngjarjeve në një aplikacion web që funksionon në shfletues. Kur shkruani aplikacione për node.js, është e domosdoshme të merret parasysh specifika e programimit të orientuar nga ngjarjet, për shembull, në vend që të ekzekutohet "var result = db.query('select..');" duke pritur për përfundimin dhe përpunimin e rezultateve, në Node.js përdoret parimi i ekzekutimit asinkron, dmth. kodi transformohet në "db.query('select..', function (result) {përpunimi i rezultatit});", ku kontrolli do të kalojë menjëherë në kodin e mëtejshëm, dhe rezultati i kërkesës do të përpunohen ndërsa vijnë të dhënat.
Burimi: opennet.ru
