Изменить успешный ответ на ошибку в Angular 6+ HttpInterceptor - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужен HttpInterceptor, который преобразует успешный ответ Http 200 в ошибку 500 Http.

Однако у меня есть работающий перехватчик, но когда дело доходит до преобразования успешного ответа в ошибку, подписчик http напрямую вызывает обработчик «complete» (не вызывается ни следующий, ни обработчик ошибок).

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next
      .handle(request)
      .pipe(
        map((event: HttpEvent<any>):any => {
          let type = this.convertTypeToString(event.type);
          if (type === "Response") {
            let error: HttpErrorResponse = new HttpErrorResponse({status: 500});
            return Observable.create(observer => observer.error(error));
          }
          return event;
        })
      );
}

Ожидаемое поведение: когда я запускаю, например, входящий вызов, я хочу вернуться - даже при успешном входе в систему - ошибка Http 500.

1 Ответ

0 голосов
/ 02 мая 2019

Решение НЕ в том, чтобы использовать HttpHandler для совершения вызова вообще. Просто предоставьте Observable, который возвращает ошибку:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  let error: HttpErrorResponse = new HttpErrorResponse({status: 500});
  return Observable.create(observer => observer.error(error));
}

HttpHandler существует, чтобы сделать запрос "для вас". Но когда это был успешный запрос, трудно (невозможно?) Перенаправить его на ответ об ошибке. Поэтому пропустите вызов next.handle () и имитируйте вызов, возвращая Observable.

...