Node.js 17.0, platforma za pokretanje mrežnih aplikacija u JavaScriptu, je objavljena. Node.js 17.0 dio je redovne grane podrške, a ažuriranja se očekuju do lipnja 2022. U nadolazećim danima, Node.js 16 će dovršiti stabilizaciju, postati LTS i biti podržan do travnja 2024. Podrška za prethodnu LTS granu, Node.js 14.0, nastavit će se do travnja 2023., a za prethodnu LTS granu, 12.0, do travnja 2022.
Glavna poboljšanja:
- V8 motor je ažuriran na verziju 9.5.
- Nastavili smo implementirati varijante osnovnog API-ja temeljene na asinhronom računalnom sučelju Promise. Uz prethodno predložene API-je Timers Promises i Streams Promises, Node.js 17.0 uvodi Readline Promises API za čitanje podataka redak po redak pomoću modula 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('Što mislite o Node.js?'); console.log('Hvala vam na vrijednim povratnim informacijama: ${answer}'); rl.close();
- U paketu je ažurirana OpenSSL biblioteka na verziju 3.0 (korištenjem forka quictls/openssl s omogućenom podrškom za QUIC protokol).
- Verzija Node.js-a sada se prikazuje u tragovima stoga koji se ispisuju kada se dogode fatalne pogreške koje uzrokuju prekid aplikacije.
Osim toga, u najnovijim verzijama Node.js-a ispravljene su dvije ranjivosti (CVE-2021-22959 i CVE-2021-22960). Ove ranjivosti omogućuju napade HTTP Request Smuggling (HRS), koji omogućuju slanje posebno izrađenih klijentskih zahtjeva za ubrizgavanje zlonamjernog JavaScript koda u sesiju drugog korisnika slanjem zlonamjerno izrađenih klijentskih zahtjeva. Zasad je poznato samo da su ovi problemi uzrokovani neispravnim rukovanjem razmacima između naziva HTTP zaglavlja i dvotočke, kao i različitim rukovanjem povratkom retka i pomicanjem retka u bloku parametara koji se koristi pri prosljeđivanju tijela zahtjeva u dijeljenom načinu rada.
Podsjećamo, Node.js platforma može se koristiti i za podršku web aplikacija na strani poslužitelja i za izradu standardnih mrežnih programa na strani klijenta i poslužitelja. Za proširenje funkcionalnosti Node.js aplikacija pripremljena je velika kolekcija modula, uključujući i one s implementacijama. poslužitelji i klijenti HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli za integraciju s raznim web okvirima, WebSocket i Ajax rukovatelji, konektori za DBMS (MySQL, PostgreSQL, SQLite, MongoDB), predlošci, CSS mehanizmi, implementacije kriptografskih algoritama i autorizacijskih sustava (OAuth), XML parseri.
Kako bi se osigurala obrada velikog broja paralelnih zahtjeva, Node.js koristi model izvršavanja asinkronog koda koji se temelji na rukovanju događajima bez blokiranja i definiciji rukovatelja povratnim pozivom. Podržane metode za multipleksiranje veza su epoll, kqueue, /dev/poll i select. Za multipleksiranje veze koristi se biblioteka libuv, koja je dodatak za libev na Unix sustavima i IOCP na Windowsima. Biblioteka libeio koristi se za stvaranje skupa niti, a c-ares je integriran za izvođenje DNS upita u načinu rada bez blokiranja. Svi sistemski pozivi koji uzrokuju blokiranje izvršavaju se unutar skupa niti i zatim, poput rukovatelja signalima, prenose rezultat svog rada natrag kroz neimenovanu cijev (pipe). Izvršenje JavaScript koda omogućeno je korištenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js s Chakra-Core motorom).
U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted okvirima i Tcl implementaciji događaja, ali petlja događaja u Node.js skrivena je od programera i nalikuje rukovanju događajima u pokrenutoj web aplikaciji u pregledniku. Kada pišete aplikacije za node.js, trebate uzeti u obzir specifičnosti programiranja vođenog događajima, na primjer, umjesto da radite "var result = db.query("select..");" uz čekanje završetka rada i naknadnu obradu rezultata, Node.js koristi princip asinkronog izvođenja, tj. kod se transformira u "db.query("select..", function (result) {result processing});", u kojem će kontrola trenutno prijeći na daljnji kod, a rezultat upita će se obrađivati kako podaci stignu.
Izvor: opennet.ru
