首页 > 解决方案 > Observables的Angular HttpClient默认错误函数

问题描述

在后端,我创建了一个很好的异常机制,所以当请求失败时。服务器将向客户端发送一条带有一些错误代码的漂亮错误消息。

像这样:

@Getter
public class ErrorResponse {

    /**
     * Http Response status code
     */
    private final HttpStatus status;

    /**
     * General Error Message
     */
    private final String message;

    private final ErrorCode errorCode;

    private final Date timeStamp;
...
}

我想默认为每次失败向用户显示错误消息。

我试图扩展HttpClient

public get<T>(endPoint: string, options?: IRequestOptions): Observable<T> {
    return this.http.get<T>(this.API + endPoint, options);
  }

但它返回一个Observable

在大部分页面中,我都在做这样的事情:

this.client.post(WebUtils.RESOURCE_HOST + '/api' + '/actor/create', formData
    ).subscribe(
      () => this.onSuccessfulPost(),
      error => {
        this.snack.error(error.error.message);
      }
    );

在很多页面中,我都在写同样的东西:

error => {
            this.snack.error(error.error.message);
          }

我读了这篇关于扩展 HttpClient 的文章。
但这对我来说还不够,它只是定义一个default "API_HOST"我想为请求方法返回对象定义默认错误函数,它们是 Observables。

有没有像扩展一样操作“HttpClient请求方法”的返回对象?

标签: javascriptangulartypescriptrxjs

解决方案


您可以使用为此而设计的新HTTPClient 拦截器

这是一个示例:

export class ErrorHandlerService implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next
      .handle(req)
      .catch((err: HttpErrorResponse) => {
          console.log('error');
          // Mandatory return statement
          return Observable.throw(err);
        }
      );
  }

}

在 Angular 执行的每个 HTTP 请求中,都会运行这个拦截器,并且会按照你告诉它的方式运行。在这种情况下,它会记录错误,但你可以让他做任何你想做的事。


推荐阅读