Angular4 - 如何检测响应是JSON还是具有可观察的纯文本

时间:2017-07-06 22:19:08

标签: angular angular2-observables

我想知道在使用通用api服务调用各种端点时是否有办法检测observable中的响应格式。有些人发回JSON,有些则是纯文本。

this.http.get(endpoint).map(response => {
    // if JSON
    return response.json();
    // else if plain text
    return response.text();
})...

2 个答案:

答案 0 :(得分:3)

doc中存在void main(){ float v[10]; int n; float x; ,但我从未在响应对象中找到此枚举,因此我使用了“技巧”:

ResponseContentType

如果有人知道我们在哪里可以找到this.http.get(endpoint).map(response => { const contentType = res.headers.get('Content-type'); if (contentType == 'application/json') { return response.json(); } else if (contentType == 'application/text') { return response.text(); } })... 枚举,请告诉我们!

答案 1 :(得分:2)

我无法找到使用Angular的内置方式来验证JSON,所以我只检查响应头中的内容类型。

这是我使用的功能:

/**
 * True of the response content type is JSON.
 */
private static isJson(value: Response): boolean {
    return /\bapplication\/json\b/.test(value.headers.get('Content-Type'));
}

Content-Type可以在字符串中添加额外的东西,所以我使用正则表达式是安全的。

如果不是JSON,我会建议失败。

 this.http.get().map((value:Response)=>{
      if(this.isJson(value)) {
         return value;
      }
      throw value;
 });

然后,您可以在订阅者中捕获已知的JSON响应。现在您知道订阅​​者中的所有响应都获得了JSON。