Перехватчик не фиксирует некоторые ошибки - PullRequest
0 голосов
/ 21 марта 2019

У меня проблема, внедрите в свое приложение Ionic 3 (angular 5) перехватчик для аутентификации apis, который я потребляю. Я навязываю ошибку, добавляя еще одну строку в Bearer, что является недопустимым и может перехватить ошибки, однако, в первом случае это работает, более во втором вызове это не попадает в ошибку (однако API отвечает ошибка 403)

addAuthHeader(request) {
return request.clone({
  setHeaders: {
    "Authorization": 'Bearer ' + _.get(this.localStorageService.getAccessToken(), 'accessToken', '')
  }
 });
}

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
//console.log(_.get(req, 'url', ''));
console.log(req);
return next.handle(req).pipe(catchError(err => {
  if (err instanceof HttpErrorResponse) {

    let statusError = _.get(err, 'status', 0);


    console.log(err);

    if (statusError == 401 || statusError == 403) {
      return this.authProvider.loginPartnerToken()
        .switchMap(() => {
          //console.log(req);
          req = this.addAuthHeader(req);
          //console.log(req);
          return next.handle(req);
        });
    }
  }
}))
}

Я результаты:

enter image description here

Как видите, первый вызов завершается неудачно, и ошибка - HttpErrorResponse, в то время как во втором она также не срабатывает, но ошибка проста HttpRequest

1 Ответ

0 голосов
/ 21 марта 2019

Как вы сказали, первая ошибка - это экземпляр HttpErrorResponse, в то время как остальные HttpRequest, поэтому они не переходят в ваше состояние:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(catchError(err => {
  if (err instanceof HttpErrorResponse) {           // <------ This condition
    // If not HttpErrorResponse, don't go here...
    // ...
  }
 }))
}

Так что это хорошее поведение вашегоперехватчик.Вам нужно проверить, хорошо ли вы возвращаете ваши наблюдаемые ошибки, и если вы сделали их самостоятельно, проверьте, что вы обрабатываете ошибки с помощью observer.error(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...