1. 基于 Promise 的其它核心模块 API
  2. 错误堆栈尾部增加 Node.js 版本信息
  3. OpenSSL 3.0 支持
  4. v8 JavaScript 引擎更新至 9.5

Node.js 的奇数版本不是稳定的版本

  • 例如,当前的 Node.js v17 ,生命周期很短,不要用于生产环境

V8引擎9.5

  • 8.1 版本开启了 Intl.DisplayNames API,支持四种类型
    • 语言
    • 区域
    • 货币
    • 脚本
  • 9.5版本,新增
    • calendar 返回不同的日历类型
    • dateTimeField 返回不同的日期时间字段的显示
    • 对于国际化应用很有用 ```jsx const esCalendarNames = new Intl.DisplayNames([‘zh’], { type: ‘calendar’ }); console.log(esCalendarNames.of(‘roc’)); // 民国纪年

const enCalendarNames = new Intl.DisplayNames([‘en’], { type: ‘calendar’ }); console.log(enCalendarNames.of(‘roc’)); // Minguo Calendar

function printDate(dateTimeField) { dateTimeField.of(‘year’) dateTimeField.of(‘month’) dateTimeField.of(‘day’)

printDate(new Intl.DisplayNames([‘zh’], { type: ‘dateTimeField’ })) // 年 月 日 // year month day printDate(new Intl.DisplayNames([‘en’], { type: ‘dateTimeField’ }))

printDate(new Intl.DisplayNames([‘KOR’], { type: ‘dateTimeField’ })) // 년 월 일 printDate(new Intl.DisplayNames([‘THA’], { type: ‘dateTimeField’ })) // ปี เดือน วัน

  1. Intl.DateTimeFormat API v8 9.5 版本中为 timeZoneName 选项新增加了四个值
  2. 1. shortGeneric
  3. 1. longGeneric
  4. 1. shortOffset
  5. 1. longOffset
  6. <a name="EeqL1"></a>
  7. ## Promise API
  8. <a name="QJGFU"></a>
  9. ### readline
  10. readline 从一个可读流对象逐行读取数据<br />process.stdin 可读取用户在终端输入的数据
  11. ```jsx
  12. import * as readline from "node:readline/promises";
  13. import { stdin as input, stdout as output } from 'process';
  14. const rl = readline.createInterface({ input, output });
  15. const answer = await rl.question('“Nodejs技术栈” 的域名是什么:');
  16. console.log(`答案: ${answer}`);
  17. rl.close();

错误堆栈增加 Node.js 版本

如果因为一些致命的错误导致进程退出,在错误堆栈的尾部将包含 Node.js 的版本信息
忽略该信息,运行时在命令行指定 —no-extra-info-on-fatal-exception 标志

OpenSSL3.0

OpenSSL 3.0 对允许的算法和密钥大小增加了严格的限制,对生态系统的影响

  • md4 这是 OpenSSL 3.0 默认不再允许的一个算法
  • 在 Node.js 17 之前的 Node 版本中,应用程序是可以正常运行的
  • Node.js v17 中将抛出一个 error code 为 ERR_OSSL_EVP_UNSUPPORTED 的错误信息
    1. import crypto from 'crypto';
    2. console.log(crypto.createHash('md4').update('123', 'utf8').digest('hex'))
    解决方法是运行时增加 —openssl-legacy-provider 标志,应用程序报错
    1. node --openssl-legacy-provider test.mjs