【问题标题】:Angular 2+ Http post request responseType blob does not show json errors returned by serverAngular 2+ Http post request responseType blob不显示服务器返回的json错误
【发布时间】:2021-12-18 14:10:32
【问题描述】:

我有一个返回文件(blob)的后端方法。为此,我将 angular http post call 的 responseType 设置为 blob。一切正常,文件下载成功。 但是,如果服务器出现错误,我发送了自定义 json 错误消息,但客户端无法解析它。我想这是一个问题,因为客户端需要 blob。

return this.httpClient.post(`http://myapi.com/mydata/DownloadJob?jobId=${jobId}`, null, { headers, responseType: 'blob' });

我找到了一个类似的链接,该链接显示了如何为 Angular 1.x here 解决这个问题。我想在 Angular 2+ 中做同样的事情。如何实现?

#更新 我找到了this,这正是我想要的

【问题讨论】:

  • 你是否考虑过使用 responseType: 'blob' as 'json'?有几个例子。

标签: angular angular2-services


【解决方案1】:

您可以为您的 httpClient 创建一个错误拦截器。这个拦截器检查是否有任何错误,如果有错误并且它被用作 blob,您可以使用它的 .text() 方法将其转换为文本,然后 JSON.parse() 将其转换为可用的对象。

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
  intercept(
    req: HttpRequest<unknown>,
    next: HttpHandler
  ): Observable<HttpEvent<unknown>> {
      return next.handle(req).pipe(
        catchError((error: HttpErrorResponse) => {
          const message = JSON.parse(error.error.text());
          return throwError(message);
        })
      );
  }
}

不太确定,没有测试,但听起来差不多。

【讨论】:

  • 问题是在 3rd 方包 (abp-ng2-module) 中有另一个错误拦截器
  • 而且上面的答案仍然没有回答如何解决解析json的问题
  • 解析JSON的问题在答案中:JSON.parse(error.error.text());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2016-03-29
相关资源
最近更新 更多