npm 包 good-guy-http 使用教程

阅读时长 7 分钟读完

前言

前端开发中,我们经常需要使用 HTTP 请求来和远程服务器交互,但是默认使用的 XMLHttpRequest(XHR)对象并没有提供对请求的状态、超时和缓存的控制。在此背景下,好的 HTTP 客户端库就显得尤为重要。在这里我们将介绍一个非常好用的 npm 包:good-guy-http。

good-guy-http 简介

good-guy-http 是一个封装了 HTTP 客户端的 npm 包,它提供了以下最主要的功能:

  • 可配置的重试机制;
  • 自定义的缓存策略;
  • 可取消的请求;
  • 多个并发请求的 deduplication 策略;
  • 带有清理器的缓存库;
  • 智能的串行请求。

安装和使用

首先,我们需要安装 good-guy-http。

在代码中使用 good-guy-http 之前,我们先需要进行一些基本的配置。首先,在你的项目中,你需要为你的 HTTP 请求定制一个缓存策略。good-guy-http 的缓存策略提供了两种消息:staleWhenRevalidatecaching。前者返回缓存副本,同时异步获取新的数据,后者则直接返回缓存数据。

以下是一个简单的示例代码:

-- -------------------- ---- -------
------ - ------------ - ---- ----------------

----- ----- - --- --------------
  ------- -----
---

--------------------------------------- -
  --------- -------
  --------- ----------------------
------------------ -- -
  ---------------------------
---

在我的这个例子中,我创建了一个 GoodGuyCache 对象来作为缓存。该对象定义了一个名为 maxAge 的选项,以指定我们想要保留的缓存时间(毫秒为单位)。然后,我使用 cache.get 方法来执行一个 GET 请求。注意,我们可以为此请求指定一个缓存键 cacheKey: ‘data’,以便我们在缓存库中使用该键来标识该请求。

执行上面的代码将会从 http://localhost:3000/data 获取数据,并返回缓存副本。如果在 maxAge 的时间内再次提出该请求,则 good-guy-http 将返回缓存副本,同时获取新的数据。在缓存失效之前,good-guy-http 会一直返回缓存的副本。

请求重试

如果想确保请求即使在失败的情况下,也始终被尝试,则需要使用 maxRetries 选项。例如,以下代码将尝试在五次重试后放弃请求:

-- -------------------- ---- -------
------ - ---------- - ---- ----------------

----- ------ - --- ------------
  ----------- --
---

---------------------------------------- -
  ------ -----
------------------ -- -
  ---------------------------
---

我们使用 HttpClient 创建一个新的 HTTP 客户端。然后,我们在 GET 请求中指定一个可选参数 retry: true,以此告诉 good-guy-http 在请求失败时尝试重试。如果尝试五次后仍然失败,则 good-guy-http 将停止重试。

请求取消

当我们需要取消一个正在执行的请求时,我们可以使用 GoodGuyCache 对象中的 cancellationMap 属性。例如,以下代码中我们将创建一个超时请求,在三秒钟后将会取消请求:

-- -------------------- ---- -------
------ - ------------ - ---- ----------------

----- ----- - --- --------------
  ------- -----
---

----- ------- - -----

----- ------------- - -- -- -
  ------ --------------------------------------- -
    --------- -------
  ------------------ -- -
    ---------------------------
  ---
--

----- ------------- - ----- -------- -- -
  ----- --------------- - --- ------------------
  ----- ------ - -----------------------
  ----- ------- - ----------------
  ----- --------- - ------------- -- -
    ------------------------
    ---------------------- -----------
  -- ---------

  ------ --------------------- -- -
    -- ----------- --- ------------- -
      -- ------ ------- --------
    - ---- -
      ---------------------
    -
  ------------- -- -
    ------------------------
  ---
--

------------------------------------------- -
  --------- -------
---

在这个例子中,我们首先定义了一个 getCachedData 函数,该函数将在缓存中获取数据。然后,我们通过创建一个 AbortController 并在三秒钟后调用 abort() 方法来创建了一个可取消的 GET 请求。

我们调用 cancelableGet 函数来发起一个可取消的 GET 请求,并在 options 中传递了一个 cacheKey 以在缓存库中缓存数据。如果在等待数据期间,我们取消了该请求,则该请求及其响应都将被丢弃。

请求去重

如果我们有多个相同的请求,并且希望 good-guy-http 合并这些请求并仅发送一个请求,则需要使用 deduplicationMap。例如,以下代码将并发执行两个 GET 请求,因为它们共享同一 deduplicationKey

-- -------------------- ---- -------
------ - ------------- ---------- - ---- ----------------

----- ------ - --- ---------------
----- ----- - --- -----------------

----- --- - ----- -- -
  ------ --------------- -
    ----------------- -------
  ---
--

----------------------------------------------- ---------------------------------------------------- -- -
  ----------------------------- --- -------------------
---

这里,我们首先创建了一个 HTTP 客户端 HttpClient 和一个缓存对象 GoodGuyCache。然后,我们声明了一个 get 函数,该函数采用 URL 作为其唯一参数,并使用 deduplicationKey 指定搜索字符串。如果我们使用相同的搜索字符串调用该方法,则拥有该行为的所有请求仅发送给远程服务器一次。

我们使用 Promise.all 来并发地调用两次 get 方法,并在两个响应中检查是否为相同的响应体。注意,由于我们使用了一个 deduplicationKey,所以该请求只被执行了一次。

总结

好的 HTTP 客户端库对于前端开发非常重要。 good-guy-http 是一个简单、易用的 npm 包,它提供了自定义缓存策略、请求重试、请求取消、请求去重等多种功能。通过阅读本文,你可以了解 good-guy-http 的常用配置和使用方法,下一步,你可以根据你的具体需求来灵活配置 good-guy-http,以解决你在开发中可能遇到的各种 HTTP 请求问题,提高你的应用的性能和用户体验。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f4f8a6e8250f93ef8900326

纠错
反馈