Angular 8拦截并修改Http错误响应

时间:2019-12-13 17:40:20

标签: angular http rxjs observable interceptor

我需要截取并修改一个HttpResponse,它是HttpErrorResponse的实例,即状态:500,状态为200,并填写其主体,这样我就可以在http.post的Observable订阅中将其作为成功的http调用进行处理。

2 个答案:

答案 0 :(得分:1)

我设法使用以下拦截器修改了HttpErrorResponse:

export class CustomErrorHttpInterceptor implements HttpInterceptor {

  constructor() {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(request).pipe(
      catchError((httpErrorResponse: HttpErrorResponse) => {

        // Customize as you wish:
        const newHttpErrorResponse = new HttpErrorResponse( {
          error: httpErrorResponse.error,
          headers: httpErrorResponse.headers,
          status: httpErrorResponse.status,
          statusText: httpErrorResponse.statusText,
          url: httpErrorResponse.url
        });

        return Observable.throw(newHttpErrorResponse);
      })
    );
  }
}

答案 1 :(得分:0)

您可以使用map运算符和rxjs中的catchError来处理错误。这里的代码:

const withoutError = this.http
      .get("https://httpstat.us/500")
      .pipe(
          catchError((error) => {
          // here you can modify your error
          return of(error)
       })
      )
      .subscribe(res => {
        console.log("Run, because error has modified", res.status);
      }, (error) => {
        console.log('Never run ...')
      });

https://httpstat.us/500始终以500状态代码进行响应。

Here,您可以看到它的工作方式。

相关问题