【问题标题】:Change successful response to error in Angular 6+ HttpInterceptor在 Angular 6+ HttpInterceptor 中更改对错误的成功响应
【发布时间】:2021-02-11 20:00:20
【问题描述】:

我需要一个 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


    【解决方案1】:

    解决方案是根本不使用 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 来模拟调用。

    【讨论】:

      【解决方案2】:

      您可以使用 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;
              })
            );
      }
      

      【讨论】:

        猜你喜欢
        • 2019-04-02
        • 2018-01-04
        • 1970-01-01
        • 2018-04-01
        • 2021-06-27
        • 2018-05-04
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        相关资源
        最近更新 更多