首页 > 其他分享 >Angular项目如何使用拦截器 httpClient 请求响应处理

Angular项目如何使用拦截器 httpClient 请求响应处理

时间:2024-08-04 13:50:34浏览次数:12  
标签:拦截器 请求 响应 token import HttpClient Angular httpClient

在Angular中,拦截器(Interceptor)是一种用于拦截和处理HTTP请求或响应的机制。HttpClient模块提供了一种方便的方式来创建拦截器,以便在发送请求或接收响应之前或之后执行一些操作。

以下是如何在Angular项目中使用HttpClient拦截器的基本步骤:

  1. 创建拦截器类:首先,你需要创建一个继承自HttpInterceptor类的拦截器类。
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class MyInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // 在这里可以修改请求或添加请求头

    const modifiedReq = req.clone({
      headers: req.headers.set('Authorization', 'Bearer ' + this.getToken())
    });

    // 将修改后的请求发送到下一个拦截器或后端
    return next.handle(modifiedReq).pipe(
      // 可以在这里处理响应
    );
  }

  private getToken(): string {
    // 假设这里获取了存储在本地的token
    return localStorage.getItem('token');
  }
}
  1. 注册拦截器:在你的Angular模块中(通常是AppModule),你需要将拦截器添加到提供者列表中。
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { MyInterceptor } from './path-to-my-interceptor';

@NgModule({
  declarations: [
    // ...
  ],
  imports: [
    // ...
  ],
  providers: [
    { provide: HTTP_INTERCEPTORS, useClass: MyInterceptor, multi: true },
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }
  1. 使用拦截器:一旦拦截器被注册,它将自动应用于所有使用HttpClient模块发出的请求。
import { HttpClient } from '@angular/common/http';

constructor(private http: HttpClient) {}

getData() {
  this.http.get('https://api.example.com/data').subscribe(data => {
    console.log(data);
  });
}
  1. 处理响应:你可以在intercept方法中添加逻辑来处理响应。例如,如果响应状态码是401(未授权),你可能想要自动重试请求或清除本地存储的token。
import { throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';

// ...

return next.handle(modifiedReq).pipe(
  catchError(error => {
    if (error.status === 401) {
      // 处理401错误,例如清除token
      localStorage.removeItem('token');
      // 可以重试请求或返回错误
    }
    return throwError(error);
  }),
  retry(3) // 可选:重试请求
);

通过使用拦截器,你可以集中处理HTTP请求和响应的逻辑,使代码更加模块化和易于维护。

标签:拦截器,请求,响应,token,import,HttpClient,Angular,httpClient
From: https://www.cnblogs.com/suducn/p/18341685

相关文章

  • mybatis配置自动填充时间拦截器
    1.Annotation:①FillOnInsertimportjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target......
  • Apache HttpClient发送文件时中文名变问号
    使用ApacheHttpClient发送multipart/form-data,包含有中文名的文件,对方收到的文件名中文变成了问号解决方法:发送方需要设置mode为HttpMultipartMode.RFC6532发送端代码如下,其中关键行为builder.setMode(HttpMultipartMode.RFC6532);importorg.apache.http.HttpEntity;impor......
  • 加油,为Vue3提供一个可媲美Angular的ioc容器
    为什么要为Vue3提供ioc容器Vue3因其出色的响应式系统,以及便利的功能特性,完全胜任大型业务系统的开发。但是,我们不仅要能做到,而且要做得更好。大型业务系统的关键就是解耦合,从而减缓shi山代码的生长。而ioc容器是目前最好的解耦合工具。Angular从一开始就引入了ioc容器,因此在业务......
  • 结合拦截器描述mybatis启动流程
    简介mybatis的启动入口一般有两个,在结合spring框架后由spring整合包下的SqlSessionFactoryBean启动如果没有整合spring,则有XMLConfigBuilder启动这两个启动入口都会初始化Configuration对象,该对象是mybatis配置文件的对象形式,我们实现的mybatis拦截器在此时被装载到configurati......
  • RestTemplate和 apache HttpClient 使用方式
    一、RestTemplate RestTemplate是简化了组装请求对象该类存在于依赖spring-boot-starter-web中,RestTemplate支持get,post现1、RestTemplate不是可直接注入Bean,需要实例化生成BeanSpringBoot的自动配置机制非常强大,但并不是所有的类都被默认自动配置为bean。对于R......
  • Spring 常用的三种拦截器详解
    前言在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是AOP、Interceptor、Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。拦截器顺序我们现在有......
  • 在.net 8中使用HttpClientFactory时日志记录请求body和响应body
     1、定义DelegatingHandlerpublicclassLoggingHandler:DelegatingHandler{privatereadonlyILogger<LoggingHandler>_logger;publicLoggingHandler(ILogger<LoggingHandler>logger){_logger=logger;}protectedov......
  • 根据路线在 Angular 中动态突出显示活动菜单项
    要在Angular应用程序中根据当前路由动态突出显示活动菜单项,您可以使用Angular的内置Router模块。这允许您将类应用于活动链接。以下是具体操作方法。步骤1.导入RouterModule确保已在Angular模块(通常是app.module.ts)中配置了RouterModule。import{RouterMo......
  • 如何在 AngularJS 中使用 Chart.js?
    Chart.js是一个灵活且功能强大的JavaScript库,可轻松创建各种类型的图表。在本指南中,我们将逐步介绍如何将Chart.js与AngularJS集成,并使用示例财务数据创建不同类型的图表。一.先决条件在我们开始之前,请确保您已准备好以下内容。已安装Node.js您的项目中包含Angu......
  • Angular 18.2.0 的新功能增强和创新
    一.Angular增强功能Angular是一个以支持开发强大的Web应用程序而闻名的平台,最近发布了18.2.0版本。此更新带来了许多新功能和改进,进一步增强了其功能和开发人员体验。在本文中,我们将深入探讨Angular18.2.0为开发人员社区提供的一些最值得注意的新增功能和更新。1......