HTTP_INTERCEPTOR для определенных маршрутов в Angular 4+ - PullRequest
0 голосов
/ 18 ноября 2018

Я создал HTTP_INTERCEPTOR, мне нужно, чтобы он работал на некоторых определенных маршрутах, а некоторые нет.

Вначале он был в основном файле модуля приложения, затем я удалил его и добавил внекоторые модули, но он все еще работает на всех маршрутах, затем я добавил его в component.ts, но не работал вообще.

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

1 Ответ

0 голосов
/ 18 ноября 2018

Невозможно указать перехватчик только для определенных маршрутов и / или модулей.

Однако вы можете добавить значение заголовка 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 });
...