【问题标题】:Angular2 http response body on errorAngular2 http响应正文出错
【发布时间】:2017-05-17 15:37:43
【问题描述】:
this.http.put(url, data)
    .map(response => response.json())
    .subscribe(
      response => console.log(response),
      error => console.log(error),
    );

成功时,它会输出从 API 返回的数据。出错时输出为 ProgressEvent,状态为 0。

发生错误时如何从API获取响应数据?

【问题讨论】:

  • 你有没有试过看这个:stackoverflow.com/questions/37052617/…
  • 是的,它也在 catch 块中返回相同的 ProgressEvent。另外值得一提的是 Angular 版本:2.2.1
  • 进度事件是否可能只是两个事件中的第一个,而常规错误事件仅在它之后出现?还是 http 调用只触发这一进度事件,之后什么也没有?
  • 只给出这一个响应,之后什么都没有。 API 的状态码是 422
  • 这看起来像是一个跨域问题(查找 CORS)。请求在 OPTIONS 命令上失败,因此服务器可能甚至没有收到请求。在将实际的 PUT 请求发送到服务器之前,客户端浏览器会引发错误。

标签: angular angular2-http


【解决方案1】:

你可以试试

this.yourHttpCall().subscribe(
        val => {
            //do something
        },
        err => {
            let error = (() => { try { return JSON.parse(err._body) } catch (something) { return err })()
            console.log(error);
        }

    );

这是一种围绕它的黑客攻击。不确定它是否适用于您的端点。

【讨论】:

    【解决方案2】:

    您可以检查_body 属性作为响应,例如:

    this.http.put(url, data)
    .map(response => {
      if (response['_body']) { // check response here.
        return response.json()
      } else {
        return {} // or return null.
      }
    })
    .subscribe(
      response => console.log(response),
      error => console.log(error),
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-29
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多