Node v14.17.0 (LTS) 版本发布

1,287 阅读3分钟

diagnostics_channel 是一个新的实验性模块,它提供了一个API来创建命名的通道,以报告任意的消息数据,用于诊断目的。

该模块最初在Node.js v15.1.0中引入,并被回传到v14.17.0,以便在更大范围内测试。

通过diagnostics_channel ,Node.js核心和模块作者可以发布关于他们在特定时间内正在做什么的上下文数据。例如,这可能是一个mysql查询的主机名和查询字符串。只要用dc.channel(name) ,创建一个命名的通道,并调用channel.publish(data) ,将数据发送给该通道的任何监听器。

const dc = require('diagnostics_channel');
const channel = dc.channel('mysql.query');

MySQL.prototype.query = function query(queryString, values, callback) {
  // Broadcast query information whenever a query is made
  channel.publish({
    query: queryString,
    host: this.hostname,
  });

  this.doQuery(queryString, values, callback);
};

通道就像一个大的全局事件发射器,但被分割成独立的对象,以确保它们获得最佳性能。如果没有任何东西在监听该通道,那么发布的开销应该尽可能地接近零。消耗通道数据就像使用channel.subscribe(listener) ,每当有消息发布到该通道时就运行一个函数一样简单。

const dc = require('diagnostics_channel');
const channel = dc.channel('mysql.query');

channel.subscribe(({ query, host }) => {
  console.log(`mysql query to ${host}: ${query}`);
});

捕获的数据可以用来为应用程序在某一特定时间正在做的事情提供背景。这可以用于增加跟踪数据、跟踪网络和文件系统活动、记录查询和其他许多事情。对于诊断工具来说,这也是一个非常有用的数据源,可以更清楚地了解应用程序在某个给定的数据点上正在做什么。

由Stephen Belanger#34895提供。

新的crypto.randomUUID() 方法现在允许生成随机的RFC 4122第四版UUID字符串。

const { randomUUID } = require('crypto');

console.log(randomUUID());
// 'aa7c91a1-f8fc-4339-b9db-f93fc7233429'

由 James M Snell#36729 贡献。

AbortControllerAbortSignal的实验性支持

Node.js 14.17.0增加了对AbortControllerAbortSignal 的实验性部分支持。

这两个构造函数都可以使用--experimental-abortcontroller 标志在全局范围内启用。

此外,几个Node.js API已经更新,以支持AbortSignal ,以便取消。并不强制要求使用它们的内置构造器。任何符合规范的第三方替代品都应该是兼容的。

AbortSignal 支持被添加到以下方法中。

  • child_process.exec

  • child_process.execFile

  • child_process.fork

  • child_process.spawn

  • dgram.createSocket

  • events.on

  • events.once

  • fs.readFile

  • fs.watch

  • fs.writeFile

  • http.request

  • https.request

  • http2Session.request

  • setImmediate 的承诺变体和setTimeout

  • 文档

    • 撤销对遗留网址的废弃,将状态改为遗留(James M Snell)#37784
    • 在稳定性指数中增加遗留状态(James M Snell)#37784
    • 升级报告API的稳定状态(Gireesh Punathil)#35654
  • Deps:

    • V8:回传苹果硅支持的各种补丁(李博红)#38051
    • 升级ICU至68.1(Michaël Zasso)#36187
    • 升级到 libuv 1.41.0 (Colin Ihrig)#37360
  • http:

    • 增加 http.ClientRequest.getRawHeaderNames() (simov)#37660
    • 用diagnostics_channel报告请求的开始和结束(Stephen Belanger)#34895
  • 利用

    • 添加getSystemErrorMap()内联(eladkeyshawn)#38101

更多,请查看 release notes