最新的 Node.js v17.5 引入了对 fetch API 的支持 ,对前端同学来说,非常熟悉。
fetch() 是一种流行的跨平台 HTTP 客户端 API,可在浏览器和 Web/Service Workers 中运行。
虽然目前在 v17.5.0 版本为试验性支持,但是如果在今后的 LTS 版本中正式支持了,就不需要依赖第三方 HTTP 请求模块。
fetch API 提供了 WHATWG 标准接口获取资源,这是一个基于 Promise 的 HTTP 客户端,可以用来简化 HTTP 请求,在浏览器环境已支持,浏览器环境的兼容性实现参考 Web/API/fetch,使用方式与浏览器中使用 Fetch API 一致。
fetch API 主要包含以下四个接口:
- fetch():该方法是最常用的,用于发送请求。
- Headers:相当于 response/request 的头信息,可以使你查询到这些头信息,或者针对不同的结果做不同的操作。
- Request:相当于一个资源请求。
- Response:相当于请求的响应。
为什么要使用?
在 Node.js 中使用 fetch() 的主要原因有两个:
- Node.js 社区中有一场激烈的讨论,讨论如何以客户端开发者熟悉的方式发展 Node 的 HTTP 堆栈,同时又能与服务器编程模型配合,如何超越目前作为核心部分的 HTTP 模型的限制,以及如何支持 HTTP/2-3 而不过度加重用户的负担,而 fetch() 正是这一对话的第一步。
- fetch() 实现基于 Undici,该项目位于 Node.js Github 项目组织下,其中的几位贡献者也是 Node.js 项目的贡献者,致力于为 Node.js 开发快速、可靠且符合规范的 HTTP 客户端,比内置的 HTTP 模块还要快,因为它摒弃了原有的 HTTP 模块,直接构建在 socket 之上。
如何使用?
目前 Node.js 17.5 中的 fetch() 是一项实验性的功能,运行脚本时需要需要添加 --experimental-fetch,即可在脚本内使用 fetch()。