我最近开始使用原生的fetch功能(节点17+)
今天我意识到它缺少
node-fetch
的一些功能,例如agent
这是为什么?
有计划添加吗?
这是一种耻辱,因为我需要将
node-fetch
添加到我的项目中
看到
真正的答案是为什么您习惯的
http
模块中的选项不可用,也许令人惊讶的是,节点的内置 fetch()
全局不使用传统内置 http
/ 提供的 HTTP 堆栈https
模块。
相反,它使用并行的、从头开始的 HTTP 堆栈重写,称为 undici。
鉴于
fetch()
的 HTTP 堆栈与标准 HTTP 堆栈完全分离,因此您可以提供给 http.get
等人的选项不适用于 fetch()
也就不足为奇了。
undici 的文档可在此处获取。 http
Agent
被替换为 Dispatcher
。您可以将自定义 Dispatcher
传递给 fetch(…, { dispatcher })
,这样您就可以自定义 fetch
的 HTTP 行为。
本机获取功能是实验性的,即尚未准备好用于生产,并且很可能存在问题。
https://nodejs.org/dist/latest-v18.x/docs/api/globals.html#fetch
jfriend00 的观点也非常有效:“将 fetch() 内置到 NodeJS 中的全部意义不就是它与浏览器中的 API 相同吗?”