javascript - Observables 的 Angular HttpClient 默认错误函数

标签 javascript angular typescript rxjs

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

像这样:

@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);
          }

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

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

最佳答案

您可以使用新的 HTTPClient interceptors是为此而设计的。

这是一个示例:

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 请求中,该拦截器都会运行,并且按照您指定的方式运行。在这种情况下,它会记录错误,但你可以让他做任何你想做的事。

关于javascript - Observables 的 Angular HttpClient 默认错误函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51538442/

相关文章:

javascript - 我的编辑按钮在下一页不起作用(仅在第一页起作用)

javascript - buffer是什么数据格式?

angular - 检测 Angular Material 垫选择列表中的键盘导航

javascript - Angular 为什么 $event 对象更改属性

angular - ng lint 命令 - 如何只在一个 typescript 文件上执行它?

javascript - 如何使用 TypeScript Controller 和 Angular Js 绑定(bind)数据

javascript - Jquery 从按钮单击获取数据

javascript - IE8 PNG Alpha 透明度没有过滤器 AlphaImageLoader?

javascript - 我可以在常规 JS 中监听 AngularJS 中抛出的事件吗(在 Angular 之外?)

javascript - 如果数组成员被包装,为什么 typescript 泛型会推断出不同的类型?