Uitgave van de server-side JavaScript-platform Node.js 17.0

De release van Node.js 17.0, het platform voor het uitvoeren van netwerkapplicaties in JavaScript, heeft plaatsgevonden. Node.js 17.0 behoort tot de reguliere ondersteuningstak, waarvoor updates tot juni 2022 zullen worden uitgebracht. Binnenkort wordt de stabilisatie van de Node.js 16-tak afgerond, die de LTS-status zal krijgen en tot april 2024 ondersteund zal worden. De ondersteuning van de vorige LTS-tak Node.js 14.0 zal doorgaan tot april 2023, en de ouder LTS-tak 12.0 tot april 2022.

Hoofdverbeteringen:

  • De V8-engine is bijgewerkt naar versie 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();
  • De meegeleverde OpenSSL-bibliotheek is bijgewerkt naar versie 3.0 (met de quictls/openssl-fork die ondersteuning biedt voor het QUIC-protocol).
  • De versie van Node.js wordt weergegeven in stacktraces die worden geproduceerd bij fatale fouten die leiden tot het beëindigen van de applicatie.

Daarnaast dient te worden vermeld dat in de actuele Node.js-takken twee kwetsbaarheden (CVE-2021-22959, CVE-2021-22960) zijn opgelost, die aanvallen van het type 'HTTP Request Smuggling' (HRS) mogelijk maken, waarmee via speciaal opgemaakte clientaanvragen kan worden ingeslopen in de inhoud van aanvragen van andere gebruikers die in dezelfde thread tussen de frontend en backend worden verwerkt (bijvoorbeeld kan kwaadaardige JavaScript-code in de sessie van een andere gebruiker worden geïnjecteerd). Details zullen later worden onthuld, maar op dit moment is alleen bekend dat de problemen worden veroorzaakt door onjuiste verwerking van spaties tussen de naam van de HTTP-header en de dubbele punt, evenals verschillende verwerking van carriage return- en line feed-tekens in het parameterblok dat wordt gebruikt bij het verzenden van het verzoekskBody in 'chunked' modus.

Ter herinnering, het Node.js-platform kan zowel worden gebruikt voor server-side ondersteuning van webapplicaties, als voor de ontwikkeling van reguliere client- en server-netwerkprogramma's. Voor de uitbreiding van de functionaliteit van Node.js-applicaties is er een uitgebreide verzameling modules beschikbaar, waarin modules met implementaties te vinden zijn. servers en clients voor HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, modules voor integratie met verschillende webframeworks, WebSocket en Ajax handlers, connectoren naar databases (MySQL, PostgreSQL, SQLite, MongoDB), template-engines, CSS-engines, implementaties van cryptografie en autorisatiesystemen (OAuth), XML-parsers.

Om een groot aantal parallelle verzoeken te verwerken, maakt Node.js gebruik van een asynchroon model voor het uitvoeren van code, gebaseerd op het verwerken van gebeurtenissen in een niet-blokkerende modus en het definiëren van callback-handlers. Methoden zoals epoll, kqueue, /dev/poll en select worden ondersteund voor het multiplexen van verbindingen. De libuv bibliotheek, die een bovenlaag vormt boven libev in Unix-systemen en boven IOCP in Windows, wordt gebruikt voor het multiplexen van verbindingen. Voor het creëren van een thread pool wordt de libeio bibliotheek ingezet en voor het uitvoeren van DNS-verzoeken in niet-blokkerende modus is c-ares geïntegreerd. Alle systeemaanroepen die blokkeren, worden uitgevoerd binnen de thread pool en geven vervolgens, net als signaalhandlers, het resultaat van hun werk terug via een onge benoemde pijp. De uitvoering van JavaScript-code wordt mogelijk gemaakt door het gebruik van de door Google ontwikkelde V8-engine (bovendien ontwikkelt Microsoft een variant van Node.js met de Chakra-Core engine).

Node.js is in essence similar to frameworks like Perl AnyEvent, Ruby Event Machine, Python Twisted, and the event implementation in Tcl, but the event loop in Node.js is hidden from the developer and resembles event handling in a web application running in a browser. When writing applications for Node.js, it's important to consider the specifics of event-driven programming. For instance, instead of executing 'var result = db.query("select.." );' and waiting for it to finish before processing the results, Node.js employs an asynchronous execution principle where the code transforms to 'db.query("select..", function (result) {result processing});', allowing control to pass immediately to the subsequent code, while the result of the query is processed as data comes in.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster