在 Web 开发中,我们通常需要使用 Fetch API 来发送网络请求并获取数据。然而,Fetch API 存在一些限制,例如无法自动处理重定向、无法自定义超时、无法缓存响应等。为了解决这些问题,可以使用 npm 包 make-fetch-happen。
什么是 make-fetch-happen?
make-fetch-happen 是一个基于 node-fetch 的封装库,旨在提供更加强大和灵活的 Fetch 特性。它支持以下功能:
- 自动跟随重定向
- 自定义超时时间
- 缓存响应
- HTTP/2 支持
- 身份验证支持
- 更加灵活的请求配置
安装 make-fetch-happen
使用 npm 进行安装:
--- ------- ----------------- ------
发送请求
基本用法
以下代码演示了如何使用 make-fetch-happen 发送 GET 请求:
----- ----- - ----------------------------- ----------------------------------------------------- -------------- -- ---------------- ---------- -- ------------------ ------------ -- ----------------------
配置选项
make-fetch-happen 提供了许多可配置的选项,以便您根据需求设置请求。以下是一些常用选项:
method
:HTTP 方法,默认为 GET。headers
:请求头对象。body
:请求体,仅在 POST、PUT、PATCH 和 DELETE 请求中使用。redirects
:重定向次数,默认为 20。follow
:是否自动跟随重定向,默认为 true。timeout
:超时时间(毫秒),默认为无限制。cacheManager
:缓存管理器对象,用于缓存响应。retry
:重试次数,默认为 0。
以下代码演示了如何设置一些常用选项:
----- ----- - ----------------------------- ----- ------- - - ------- ------- -------- - --------------- ------------------ -- ----- ---------------- ------ ------ ----- ------ ------- - --- ---------- -- ------- ------ -------- ----- ------------- --- --------------- ------ -- -- --------------------------------------------------- -------- -------------- -- ---------------- ---------- -- ------------------ ------------ -- ----------------------
缓存响应
make-fetch-happen 可以将响应缓存到本地磁盘,以便稍后重复使用。这可以减少网络请求并提高性能。以下是一些常用的缓存选项:
cachePath
:缓存文件路径,默认为.cache
。cacheTTL
:缓存时间(秒),默认为无限制。cacheKeyGenerator
:缓存键生成器函数,用于生成唯一的缓存键。
以下代码演示了如何启用缓存:
----- ----- - ----------------------------- ----- ------- - - ---------- --------- --------- -- - --- -- ----- ------------------ ------- -- ----------- - -------------------------------- -- ----------------------------------------------------- - ------------- --- -------------- -- -------------- -- ---------------- ---------- -- ------------------ ------------ -- ----------------------
身份验证
make-fetch-happen 支持基本身份验证和 Bearer Token 身份验证。以下是一些常用的身份验证选项:
auth
:身份验证字符串,例如username:password
。bearer
:Bearer Token 字符串。
以下代码演示了如何进行身份验证:
----- ----- - ----------------------------- ----- ------- - - ----- ------------ ----------------------------------------------------------- ---------- ---------------------------------------------------------------------------------------