可以在Angular 5中注册多个拦截器吗?

可以在Angular 5中注册多个拦截器吗?,angular,interceptor,Angular,Interceptor,我正在尝试向现有的Angular应用程序添加HTTP拦截器 关键是,它已经提供了一个拦截器: providers: [ { provide: HTTP_INTERCEPTORS, useClass: CustomInterceptor, multi: true }, AuthGuard, AuthService, AuthenticationInterceptor], 据我所知,它们可以通过管道相互连接。因此,我尝试这样做:

我正在尝试向现有的Angular应用程序添加HTTP拦截器

关键是,它已经提供了一个拦截器:

  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: CustomInterceptor,
      multi: true
    }, 
    AuthGuard, AuthService, AuthenticationInterceptor],
据我所知,它们可以通过管道相互连接。因此,我尝试这样做:

  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: CustomInterceptor, // existing interceptor
      multi: true
    }, AuthGuard, AuthService,
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AuthenticationInterceptor, // my interceptor
      multi: true
    }],

一切都很顺利。但我不确定是否覆盖了现有的拦截器。在Angular 5中注册多个拦截器可以吗?他们互相抵消了吗?或者它们只是作为管道中的工作站工作,并相互补充?

TL;DR是的,提供多个拦截器是可以的,它们可以按顺序运行

但我不确定是否覆盖了现有的拦截器

通过运行代码并进行检查,您可以看到是否发生了这种情况。在任何情况下,协议都明确指出,在讨论其顺序时,可以有多个拦截器:

Angular按提供拦截器的顺序应用拦截器。如果提供拦截器A、B、C,请求将在A->B->C中流动,响应将在C->B->A中流动

在上述同一文档的几个段落中,还解释了
选项与此相关:

注意multi:true选项。这个必需的设置告诉Angular,HTTP_拦截器是注入一个值数组而不是单个值的多提供者的令牌

可以找到此标志的文档