HTTP_INTERCEPTOR用于Angular 4+中的特定路由

时间:2018-11-18 11:31:53

标签: javascript angular angular-routing angular4-httpclient

我已经创建了HTTP_INTERCEPTOR,我需要它在某些特定的路由上工作,而另一些则不能。

一开始它在主应用模块文件中, 然后我从那里删除了它,并将其添加到某些模块中,但是它仍然可以在所有路由上使用,然后我将其添加到component.ts中,但根本不起作用。

{
            provide: HTTP_INTERCEPTORS,
            useClass: AuthExpiredInterceptor,
            multi: true,
            deps: [Injector]
},

1 个答案:

答案 0 :(得分:3)

不可能仅为某些路由和/或模块指定拦截器。

但是,您可以添加一个http标头值,该值将跳过对该请求应用拦截器。例如:

import { HttpHeaders } from '@angular/common/http';
export const InterceptorSkip = 'X-Skip-Interceptor';
export const InterceptorSkipHeader = new HttpHeaders({
  'X-Skip-Interceptor': ''
});

然后在我的错误处理程序拦截器中,如果应用了标头,则不要捕获错误并进行处理,而应将其冒泡到我的服务和组件中。

@Injectable()
export class ErrorHandlerInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>,next: HttpHandler
  ): Observable<HttpEvent<any>> {
    if (request.headers && request.headers.has(InterceptorSkip)) {
      const headers = request.headers.delete(InterceptorSkip);
      return next.handle(request.clone({ headers }));
    }
    return next.handle(request).pipe(catchError(this.processError));
  }


  ...

}

然后,只要您有HTTP请求,就想将其忽略即可,将InterceptorSkipHeader添加到请求中

this.http.get<ResponseModel>('api/url', { headers : InterceptorSkipHeader });