首页 > 解决方案 > 在 Angular 6+ HttpInterceptor 中更改对错误的成功响应

问题描述

我需要一个 HttpInterceptor 将 Http 200 成功响应更改为 500 Http 错误。

但是我有一个有效的拦截器,但是当将成功的答案转换为错误时,http订阅者直接调用“完成”处理程序(下一个或错误处理程序都没有被调用)。

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 错误。

标签: angular-http-interceptors

解决方案


您可以使用 throwError Observer 返回观察者表单成功处理程序。

import { throwError } from 'rxjs';

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 throwError(err);
          }
          return event;
        })
      );
}

推荐阅读