Angular 中使用 HttpInterceptor 实现请求拦截器

阅读时长 4 分钟读完

在前端开发中,我们经常需要向后端发送请求获取数据。但有些情况下,我们需要对请求进行一些额外的处理,例如添加请求头、对请求参数进行加密等。这时候,就可以使用 Angular 中的 HttpInterceptor 实现请求拦截器。

HttpInterceptor 的作用

HttpInterceptor 是 Angular 提供的一个拦截器接口,可以用来在发送请求和接收响应的过程中,对请求和响应进行一些额外的处理。HttpInterceptor 接口提供了两个方法:

  • intercept:拦截请求和响应,并进行处理
  • handle:发送请求并返回响应

通过实现 HttpInterceptor 接口并注册到 Angular 的 HttpClientModule 中,我们可以对所有的请求进行统一的处理,而不需要在每个请求中都添加一遍相同的代码。

实现 HttpInterceptor

下面我们来看一个简单的例子,实现一个拦截器,在每个请求头中添加一个 token。

首先,我们需要创建一个拦截器类,实现 HttpInterceptor 接口:

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

-------------
------ ----- ---------------- ---------- --------------- -
  ------------------ ----------------- ----- ------------- -------------------------- -
    ----- ----- - ------------------
    ------- - ---------------
      ----------- -
        -------------- ------- ---------
      -
    ---
    ------ ---------------------
  -
-
展开代码

在上面的代码中,我们实现了 intercept 方法,它接收一个 HttpRequest 对象和一个 HttpHandler 对象,分别表示当前的请求和下一个拦截器(如果有的话)。我们在 intercept 方法中对请求进行了处理,为请求头添加了一个 Authorization 字段,值为我们设定的 token。最后,我们调用了 next.handle(request) 方法,将请求传递给下一个拦截器或者 HttpClient。

接下来,我们需要在 AppModule 中将拦截器注册到 HttpClientModule 中:

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

-----------
  -------- --------------- ------------------
  ------------- ---------------
  ---------- -
    -
      -------- ------------------
      --------- -----------------
      ------ ----
    -
  --
  ---------- --------------
--
------ ----- --------- --
展开代码

在上面的代码中,我们使用 HTTP_INTERCEPTORS 提供的 token,将 TokenInterceptor 类注册为拦截器,并设置 multi: true,表示这个拦截器可能会被多次使用。

拦截器的执行顺序

在实际开发中,可能会有多个拦截器需要执行。这时候,拦截器的执行顺序就非常重要了。

Angular 中的拦截器按照注册的顺序依次执行。也就是说,先注册的拦截器先执行,后注册的拦截器后执行。如果其中一个拦截器返回了一个 Observable 对象,则后续的拦截器就不会执行了。

总结

在本文中,我们介绍了 Angular 中的 HttpInterceptor 接口,以及如何使用它实现请求拦截器。我们还讨论了拦截器的执行顺序问题。通过使用拦截器,我们可以在请求和响应过程中对数据进行一些额外的处理,从而提高开发效率和代码可维护性。

示例代码:https://stackblitz.com/edit/angular-httpinterceptor-example

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

纠错
反馈

纠错反馈