更改对Angular 6+ HttpInterceptor中的错误的成功响应

时间:2019-04-30 15:44:48

标签: angular-http-interceptors

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

ALTER TABLE [YourTableName]
ADD  DEFAULT (getdate()) FOR [YourDateColumn];