在 Angular 中使用 HTTP 拦截器

阅读时长 6 分钟读完

在 Angular 中使用 HTTP 拦截器

HTTP 拦截器是 Angular 中的一个强大功能,它允许我们在 HTTP 请求和响应之间添加自定义行为。通过使用 HTTP 拦截器,我们可以在应用程序中添加全局处理逻辑,例如添加认证令牌、处理错误和日志记录。

在本文中,我们将深入了解 Angular 中的 HTTP 拦截器,并提供一些示例代码来帮助您开始使用它。

HTTP 拦截器的基本用法

在 Angular 中使用 HTTP 拦截器非常简单。我们只需要创建一个实现 HttpInterceptor 接口的类,并将其提供给 HTTP 客户端以使用。

以下是一个简单的 HTTP 拦截器,它将在每个请求中添加一个自定义标头:

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

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

在这个例子中,我们创建了一个名为 CustomInterceptor 的类,它实现了 HttpInterceptor 接口。在 intercept 方法中,我们使用 HttpRequest 的 clone 方法来创建一个新的请求对象,并在其中添加了自定义标头。

最后,我们将新的请求对象传递给 next.handle 方法,并返回其结果。这将继续处理该请求,并将响应返回给调用方。

要使用这个拦截器,我们只需要将其提供给 HttpClient 的拦截器数组:

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

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

在这个例子中,我们将 CustomInterceptor 提供给 HTTP_INTERCEPTORS 令牌,并将 multi 属性设置为 true,以便允许多个拦截器同时运行。

处理 HTTP 错误

HTTP 拦截器的一个常见用途是处理 HTTP 错误。通过在拦截器中添加错误处理逻辑,我们可以避免在每个组件或服务中重复编写相同的代码。

以下是一个简单的 HTTP 错误处理器,它会在发生错误时显示一个警告消息:

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

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

在这个例子中,我们创建了一个名为 ErrorInterceptor 的类,它实现了 HttpInterceptor 接口。在 intercept 方法中,我们使用 catchError 操作符来捕获任何发生的错误,并在其中添加自定义错误处理逻辑。

请注意,我们使用 throwError 操作符来重新抛出错误。这将使错误继续传递到下一个处理程序。如果不重新抛出错误,HTTP 客户端将认为请求已成功完成,并返回一个空响应对象。

添加认证令牌

另一个常见的用例是在每个请求中添加认证令牌。通过在拦截器中添加此逻辑,我们可以避免在每个请求中手动添加标头。

以下是一个简单的认证拦截器,它将在每个请求中添加一个认证令牌:

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

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

在这个例子中,我们创建了一个名为 AuthInterceptor 的类,它实现了 HttpInterceptor 接口。在 intercept 方法中,我们使用 localStorage 来获取存储在本地的认证令牌,并在其中添加了一个 Authorization 标头。

请注意,我们使用了模板字符串来构建标头值。这使得代码更加可读,并且可以轻松地添加其他标头。

结论

HTTP 拦截器是 Angular 中一个非常强大的功能。通过使用拦截器,我们可以全局处理 HTTP 请求和响应,并添加自定义行为。

在本文中,我们提供了一些示例代码,以帮助您开始使用 HTTP 拦截器。无论您是处理 HTTP 错误、添加认证令牌还是执行其他操作,HTTP 拦截器都是一个非常有用的工具。

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

纠错
反馈