Node.js 17.0, ืึท ืคึผืืึทืืคืึธืจืืข ืคึฟืึทืจ ืคืืืกื ืืืง ื ืขืฅ ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืืฉืึทืืืึทืกืงืจืืคึผื, ืืื ืืืคืจืืื. Node.js 17.0 ืืื ืึท ืจืขืืืืขืจ ืฉืืืฆื ืฆืืืืึทื ืืืึธืก ืืืขื ืคืึธืจืืขืฆื ืฆื ืืึทืงืืืขื ืืขืจืืืึทื ืืืงืื ืืขื ืืื ืืื ื 2022. ืืื ืื ืงืืืขื ืืืงืข ืืขื, ืื ืกืืืืืึทืืึทืืืืฉืึทื ืคืื ืื Node.js 16 ืฆืืืืึทื ืืืขื ืืืื ืืขืขื ืืืงื, ืืืึธืก ืืืขื ืืึทืงืืืขื LTS ืกืืึทืืืก ืืื ืืืขื ืืืื ืืขืฉืืืฆื ืืื ืืคืจืื 2024. ืืืฉืึทืื ืคืื ืื ืคืจืืขืจืืืงืข LTS ืฆืืืืึทื ืคืื Node.js 14.0 ืืืขื ืืืืขืจื ืืื ืืคืจืื 2023, ืืื ืื ืืึธืจ ืคืจืืขืจ ืืขืฆืืข LTS ืฆืืืืึทื 12.0 ืืื ืืคืจืื 2022.
ืืืืคึผื ืืืคึผืจืืืืืึทื ืฅ:
- ืื V8 ืืึธืืึธืจ ืืื ืืขืจืืืึทื ืืืงื ืฆื ืืืขืจืกืืข 9.5.
- ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืืขืจืืึทื ืฅ ืคืื ืื ืืงืขืจืืืง API ืืืืืจื ืืืืฃ ืื ื ืืฆื ืคืื ืื Promise ืืืกืื ืืงืจืึทื ืึทืก ืงืึทืืคึผืืืืื ื ืฆืืืื ื ืืื ืคืืจืืืืื. ืืื ืึทืืืฉืึทื ืฆื ืื ืคืจืืขืจ ืืขืคึฟืื ื ืืืืขืจืก ืืืืืืช ืืื ืกืืจืขืึทืืก ืืืืืืช ืึทืคึผืืก, Node.js 17.0 ืื ืืจืึทืืืกืื ืื Readline Promise API ืคึฟืึทืจ ืืืืขื ืขื ืืึทืื ืฉืืจื ืืืจื ืฉืืจื ืืื ืื ืจืขืืืื ืข ืืึธืืืืข. ืึทืจืืึทื ืคืืจ * ืืื ืจืขืืืื ืข ืคึฟืื 'ื ืึธืืข: ืจืขืึทืืืื ืข / ืืืืืืช'; ืึทืจืืึทื ืคืืจ {ืกืืืื ืืื ืึทืจืืึทื ืฉืจืืึทื, ืกืืืึธืื ืืื ืจืขืืืืืึทื} ืคึฟืื 'ืคึผืจืึธืฆืขืก'; const rl = readline.createInterface ({ ืึทืจืืึทื ืฉืจืืึทื, ืจืขืืืืืึทื }); const answer = await rl.question ('ืืืึธืก ืืึธื ืืืจ ืืจืึทืืื ืคืื Node.js?'); console.log ('ืืื ืง ืืืจ ืคึฟืึทืจ ืืืื ืืืขืจืืคืื ืืึทืืขืจืงืื ืืขื: ${ืขื ืืคืขืจ}'); ืจื.ืงืืึธืกืข();
- ืื ืกืึทืคึผืืืื OpenSSL ืืืืืืึธืืขืง ืืื ืืขืจืืืึทื ืืืงื ืฆื ืืืขืจืกืืข 3.0 (ืึท ืงืืืืงืืืก / ืึธืคึผืขื ืกืกื ืืึธืคึผื ืืื QUIC ืคึผืจืึธืืึธืงืึธื ืฉืืืฆื ืขื ืืืืึทืื ืืื ืืขื ืืฆื).
- ืขื ืืืืึทืื ืื Node.js ืืืขืจืกืืข ืฆื ืืืื ืืขืืืืื ืืื ืึธื ืืืืื ืืจืึทืกืขืก ืืืึธืก ืืขื ืขื ืจืขืืืืืึทื ืืื ืคืึทื ืคืื ืคืึทืืึทื ืขืจืจืึธืจืก ืืืึธืก ืคืึทืจืฉืึทืคื ืื ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืคืึทืจืขื ืืืงื.
ืืื ืืขืจืฆื, ืืืจ ืงืขื ืขื ืืขืจืืึธื ืขื ืื ืืืืืึทื ืืืฉืึทื ืคืื ืฆืืืื ืืืึทืื ืขืจืึทืืืืืืื ืืื ืื ืงืจืึทื ื ืฆืืืืืื ืคืื Node.js (CVE-2021-22959, CVE-2021-22960), ืืืึธืก ืืึทืื ืขืก ืืขืืืขื ืฆื ืืืจืืคืืจื "HTTP Request Smuggling" (HRS) ืื ืคืืื, ืืืึธืก ืืึธืื ืืื ืื ืฆื ืืืขืืืฉ ืืื ืื ืืื ืืึทืื ืคืื ืื ืืขืจืข ื ืืฆืขืจืก 'ืจืืงืืืขืก ืคึผืจืึทืกืขืกื ืืื ืืขืจ ืืขืืืืงืขืจ ืคืึธืืขื ืฆืืืืฉื ืื ืคืจืึธื ืืขื ื ืืื ืืึทืงืขื ื (ืืืฉื, ืืืืืข ืืืฉืึทืืืึทืกืงืจืืคึผื ืงืึธื ืงืขื ืขื ืืืื ืื ืกืขืจืืึทื ืืื ืื ืื ืืขืจ ืืึทื ืืฆืขืจ ืก ืกืขืกืืข). ืืขืืึทืืืก ืืืขื ืืืื ืื ืืคืืขืงื ืฉืคึผืขืืขืจ, ืึธืืขืจ ืืืฆื ืืืจ ื ืึธืจ ืืืืกื ืึทื ืื ืคืจืืืืขืืขื ืืขื ืขื ืืขืคึฟืืจื ืืืจื ืคืึทืืฉ ืืึทื ืืืื ื ืคืื ืกืคึผืืืกืึทื ืฆืืืืฉื ืื HTTP ืืขืืขืจ ื ืึธืืขื ืืื ืื ืฆืืืืืคึผืื ืื, ืืื ืืขืืื ื ืืื ืคืึทืจืฉืืืขื ืข ืืึทื ืืืื ื ืคืื ืงืึทืจืขืืข ืฆืืจืืงืงืืืขื ืืื ืฉืืจื ืงืึธืจืืขื ืืืชืืืช ืืื ืื ืคึผืึทืจืึทืืขืืขืจ ืืืึธืง ืืขื ืืฆื ืืืขื ืืจืึทื ืกืืืืื ื. ืื ืืขืื ืืืฃ ืืื ืคึผืึทืจืฅ ืืื ืื "ืืฉืึทื ืืงื" ืืึธืืข "
ืืื ืืื ืื ืฆืืจืืงืจืืคื ืึทื ืื Node.js ืคึผืืึทืืคืึธืจืืข ืงืขื ืขื ืืืื ืืขืืืืื ื ืืืืืข ืคึฟืึทืจ ืกืขืจืืืขืจ ืืืึทื ืฉืืืฆื ืคืื ืืืขื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืคึฟืึทืจ ืงืจืืืืืื ื ืคึผืจืึธืกื ืงืืืขื ื ืืื ืกืขืจืืืขืจ ื ืขืฅ ืืืืื. ืฆื ืืงืกืคึผืึทื ื ืื ืคืึทื ืืงืฉืึทื ืึทืืืื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ื ืคึฟืึทืจ Node.js, ืึท ืืจืืืก ืืึทืืืื ื ืคืื ืืึทืืืฉืืื ืืื ืฆืืืขืืจืืื, ืืื ืืืึธืก ืืืจ ืงืขื ืขื ืืขืคึฟืื ืขื ืืึทืืืฉืืื ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืืืคึผ, ืกืืืคึผ, ืงืกืืคึผืคึผ, ืื ืก, ืคืืคึผ, ืืืึทืคึผ, ืคึผืึธืคึผ3 ืกืขืจืืืขืจืก ืืื ืงืืืืึทื ืฅ, ืืึทืืืฉืืื ืคึฟืึทืจ ืื ืืึทืืจืืืฉืึทื. ืืื ืคืึทืจืฉืืื ืืืขื ืคืจืึทืืขืืืึธืจืงืก, WebSocket ืืื Ajax ืืึทื ืืืขืจืก, ืงืึทื ืขืงืืขืจื ืฆื DBMS (MySQL, PostgreSQL, SQLite, MongoDB), ืืืกืืขืจ ืขื ืืืฉืึทื ื, CSS ืขื ืืืฉืึทื ื, ืืืคึผืืึทืืึทื ืฅ ืคืื ืงืจืืคึผืืึธืืจืึทืคืืง ืึทืืืขืจืืืึทืื ืืื ืืขืจืืืืืขื ืืฉ ืกืืกืืขืืขื (OAuth), XML ืคึผืึทืจืกืขืจืก.
ืฆื ืฉืขืคึผื ืืจืืืก ื ืืืขืจ ืคืื ืคึผืึทืจืึทืืขื ืจืืงืืืขืก, Node.js ื ืืฆื ืึทื ืืืกืื ืืงืจืึทื ืึทืก ืงืึธื ืืืจืืคืืจืื ื ืืึธืืขื ืืืืืจื ืืืืฃ ื ืื-ืืืึทืงืื ื ืืขืฉืขืขื ืืฉ ืคึผืจืึทืกืขืกืื ื ืืื ืืืคืืื ืื ื ืงืึทืืืืึทืงืง ืืึทื ืืืขืจืก. ืฉืืืฆื ืืขืืืึธืืก ืคึฟืึทืจ ืืืืืืคึผืืขืงืกืื ื ืงืึทื ืขืงืฉืึทื ื ืึทืจืืึทื ื ืขืืขื epoll, kqueue, /dev/poll ืืื select. ืคึฟืึทืจ ืงืฉืจ ืืืืืืคึผืืขืงืกืื ื, ืื ืืืืืื ืืืืืืึธืืขืง ืืื ืืขื ืืฆื, ืืืึธืก ืืื ืึทื ืึทืืืฉืึทื ืฆื ืืืืขืื ืืืืฃ ืืื ืืงืก ืกืืกืืขืืขื ืืื ืฆื IOCP ืืืืฃ Windows. ืื ืืืืืึธ ืืืืืืึธืืขืง ืืื ืืขื ืืฆื ืฆื ืฉืึทืคึฟื ืึท ืคืึธืืขื ืืขืงื, ืืื C-ares ืืื ืื ืึทืืจืืืืื ืฆื ืืืจืืคืืจื ืื ืก ืคึฟืจืืื ืืื ืึท ื ืื-ืืืึทืงืื ื ืืึธืืข. ืึทืืข ืกืืกืืขื ืจืืคื ืืืึธืก ืคืึทืจืฉืึทืคื ืืืึทืงืื ื ืืขื ืขื ืขืงืกืึทืงืืืืึทื ืืื ืื ืคืึธืืขื ืืขืงื ืืื ืืขืจื ืึธื, ืืื ืกืืื ืึทื ืืึทื ืืืขืจืก, ืคืึธืจื ืื ืจืขืืืืืึทื ืคืื ืืืืขืจ ืึทืจืืขื ืฆืืจืืง ืืืจื ืึทื ืึทื ื ืืืื ืจืขืจ. ืื ืืืจืืคืืจืื ื ืคืื ืืืฉืึทืืืึทืกืงืจืืคึผื ืงืึธื ืืื ืื ืฉืืจื ืืืจื ืื ื ืืฆื ืคืื ืื ืื8 ืืึธืืึธืจ ืืขืืืขืืึธืคึผืขื ืืืจื Google (ืืื ืืขืจืฆื, ืืืืงืจืึธืกืึธืคึฟื ืืื ืืขืืืขืืึธืคึผืื ื ืึท ืืืขืจืกืืข ืคืื โโNode.js ืืื ืื Chakra-Core ืืึธืืึธืจ).
ืืื ืืืื ืืึทืจืฅ, Node.js ืืื ืขื ืืขื ืฆื ืื Perl AnyEvent, Ruby Event Machine, Python Twisted ืคืจืึทืืขืืืึธืจืงืก ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืขืฉืขืขื ืืฉื ืืื Tcl, ืึธืืขืจ ืื ืืขืฉืขืขื ืืฉ ืฉืืืืฃ ืืื Node.js ืืื ืคืึทืจืืึธืจืื ืคืื ืื ืืขืืืขืืึธืคึผืขืจ ืืื ืจืืืขืืืึทืื ืืขืฉืขืขื ืืฉ ืคึผืจืึทืกืขืกืื ื ืืื ืึท ืืืขื ืึทืคึผืืึทืงืืืฉืึทื. ืคืืืกื ืืืง ืืื ืืืขืืขืจืขืจ. ืืืขื ืฉืจืืืื ืึทืคึผืืึทืงืืืฉืึทื ื ืคึฟืึทืจ node.js, ืขืก ืืื ื ืืืืืง ืฆื ื ืขืืขื ืืื ืืฉืืื ืื ืกืคึผืขืกืืคืืงืก ืคืื ืืขืฉืขืขื ืืฉ-ืืขืืจืืื ืคึผืจืึธืืจืึทืืืื ื, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืึทื ืฉืืึธื ืคืื "var result = db.query ("ืกืขืืขืงืืืจื..");" ืืื ืืืืจืื ืคึฟืึทืจ ืื ืงืึทืืคึผืืืฉืึทื ืคืื ืึทืจืืขื ืืื ืกืึทืืกืึทืงืืืึทื ื ืคึผืจืึทืกืขืกืื ื ืคืื ืื ืจืขืืืืืึทืื, Node.js ื ืืฆื ืืขื ืคึผืจืื ืฆืืคึผ ืคืื ืืืกืื ืืงืจืึทื ืึทืก ืืืจืืคืืจืื ื, ื.ืข. ืืขืจ ืงืึธื ืืื ืคืืจืืืื ืืืขื ืืื "db.query ("ืกืขืืขืงืืืจื ..", ืคึฟืื ืงืฆืืข (ืจืขืืืืืึทื) {ืจืขืืืืืึทื ืคึผืจืึทืกืขืกืื ื});", ืืื ืืืึธืก ืงืึธื ืืจืึธื ืืืขื ืืืืื ืคืึธืจื ืฆื ืืืืึทืืขืจ ืงืึธื, ืืื ืื ืึธื ืคึฟืจืขื ืจืขืืืืืึทื ืืืขื ืืืื ืคึผืจืึทืกืขืกื ืืื ืืึทืื ืขืจืืืืื.
ืืงืืจ: opennet.ru