Сервер талын JavaScript Node.js 17.0 хувилбар

JavaScript дээр сүлжээний програмуудыг ажиллуулах платформ Node.js 17.0 гарлаа. Node.js 17.0 нь 2022 оны 16-р сар хүртэл шинэчлэлтүүдийг хүлээн авах байнгын дэмжлэгийн салбар юм. Ойрын өдрүүдэд Node.js 2024 салбарыг тогтворжуулах ажил дуусч, LTS статусыг авч, 14.0 оны 2023-р сар хүртэл дэмжигдэх болно. Node.js 12.0-ийн өмнөх LTS салбарын засвар үйлчилгээ 2022 оны XNUMX-р сар хүртэл, сүүлийн LTS XNUMX-ийн өмнөх жил XNUMX оны XNUMX-р сар хүртэл үргэлжилнэ.

Гол сайжруулалтууд:

  • V8 хөдөлгүүрийг 9.5 хувилбар болгон шинэчилсэн.
  • Promise асинхрон тооцоолох интерфейсийг ашиглахад суурилсан үндсэн API-ийн хувилбаруудыг хэрэгжүүлэх ажил үргэлжилж байна. Өмнө нь санал болгож байсан Timers Promises болон Streams Promises API-уудаас гадна Node.js 17.0 нь readline модулийг ашиглан өгөгдлийн мөр мөрөөр уншихад зориулсан Readline Promise API-г нэвтрүүлсэн. import * as readline from 'node:readline/promises'; 'процесс'-ээс { stdin-г оролт, stdout-ыг гаралт болгон } импортлох; const rl = readline.createInterface({ оролт, гаралт }); const answer = await rl.question('Та Node.js-ийн талаар ямар бодолтой байна вэ?'); console.log('Үнэтэй санал өгсөнд баярлалаа: ${answer}'); rl.close();
  • Нийлүүлсэн OpenSSL номын санг 3.0 хувилбар болгон шинэчилсэн (QUIC протоколын дэмжлэгийг идэвхжүүлсэн quictls/openssl салаа ашиглаж байна).
  • Node.js хувилбарыг аппликешныг зогсооход хүргэдэг ноцтой алдаа гарсан тохиолдолд гарах стекийн мөрүүдэд харуулахыг идэвхжүүлсэн.

Нэмж дурдахад бид Node.js-ийн одоогийн салбаруудын (CVE-2021-22959, CVE-2021-22960) хоёр эмзэг байдлыг арилгаж, "HTTP Request Smuggling" (HRS) халдлага хийх боломжтой гэдгийг дурдаж болно. урд болон арын хэсгийн хооронд ижил хэлхээнд боловсруулагдсан бусад хэрэглэгчдийн хүсэлтийн агуулгыг оруулах боломжийг бидэнд олгоно (жишээ нь, хортой JavaScript кодыг өөр хэрэглэгчийн сессэд оруулж болно). Дэлгэрэнгүйг дараа нь тодруулах болно, гэхдээ одоохондоо бид зөвхөн HTTP толгой хэсгийн нэр болон хоёр цэгийн хоорондох зайг буруу хэрэглэснээс, мөн дамжуулалт хийх үед ашигласан параметрийн блок дахь мөрний буцах болон мөрийн тэжээлийн тэмдэгтүүдийг өөр өөр харьцсанаас үүдэлтэй гэдгийг бид мэднэ. хүсэлтийн хэсгийг хэсэгчлэн "хэсэглэсэн" горимд "

Node.js платформ нь вэб програмуудыг сервер талын дэмжлэг үзүүлэх болон энгийн клиент болон серверийн сүлжээний програмуудыг үүсгэхэд ашиглагдаж болохыг сануулъя. Node.js програмын функцийг өргөжүүлэхийн тулд та HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 серверүүд болон үйлчлүүлэгчдийг хэрэгжүүлэх модулиудыг, нэгтгэх модулиудыг олох боломжтой модулиудын томоохон цуглуулга бэлтгэсэн. янз бүрийн вэб фреймворкууд, WebSocket болон Ajax боловсруулагч, DBMS холбогч (MySQL, PostgreSQL, SQLite, MongoDB), загвар хөдөлгүүр, CSS хөдөлгүүр, криптографийн алгоритм ба зөвшөөрлийн систем (OAuth), XML задлагч.

Олон тооны зэрэгцээ хүсэлтийн боловсруулалтыг хангахын тулд Node.js нь блоклохгүй үйл явдлын зохицуулалт болон буцаан дуудлагын зохицуулагчийн тодорхойлолт дээр суурилсан асинхрон код гүйцэтгэх загварыг ашигладаг. Мультиплекс холболтын дэмжигдсэн аргууд нь epoll, kqueue, /dev/poll болон сонгох юм. Холболтыг олон талт болгохын тулд Unix систем дээрх libev болон Windows дээрх IOCP-д зориулсан нэмэлт болох libuv номын санг ашигладаг. Libeio номын сан нь урсгалын сан үүсгэхэд ашиглагддаг, c-ares нь блоклохгүй горимд DNS асуулга явуулахад нэгтгэгддэг. Блоклоход хүргэдэг бүх системийн дуудлагууд нь урсгалын сан дотор хийгдэж, дохионы зохицуулагчид шиг нэргүй хоолойгоор (хоолой) дамжуулан ажлын үр дүнг буцааж шилжүүлдэг. JavaScript кодын гүйцэтгэлийг Google-ийн боловсруулсан V8 хөдөлгүүр ашиглан хангадаг (үүнээс гадна Microsoft нь Chakra-Core хөдөлгүүртэй Node.js хувилбарыг хөгжүүлж байна).

Үндсэндээ Node.js нь Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks болон Tcl үйл явдлын хэрэгжилттэй төстэй боловч Node.js дахь үйл явдлын давталт нь хөгжүүлэгчээс нуугдсан бөгөөд ажиллаж байгаа вэб программ дахь үйл явдлыг зохицуулахтай адил юм. хөтөч дээр. Node.js-д зориулсан программ бичихдээ та "var result = db.query("select..");" гэхийн оронд үйл явдалд тулгуурласан програмчлалын онцлогийг анхаарч үзэх хэрэгтэй. Ажил дуусч, үр дүнг боловсруулахыг хүлээж байгаа тул Node.js нь асинхрон гүйцэтгэх зарчмыг ашигладаг, өөрөөр хэлбэл. кодыг "db.query("сонгох..", функц (үр дүн) {үр дүнг боловсруулах});" болгон хувиргах бөгөөд үүний дараа удирдлага нь дараагийн код руу шууд шилжих бөгөөд өгөгдөл ирэх үед асуулгын үр дүнг боловсруулах болно.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх