如何将响应的主体作为字符串?

时间:2016-04-21 17:09:20

标签: ajax angular rxjs

我有一个HTTP服务,它只是从服务器请求数据并返回结果。 在我的项目开发期间,服务器上可能会出现不同的错误,并且它并不总是返回JSON,因此我需要将响应的主体作为字符串。

我有这段代码请求数据:

getVersions(entryURLName: string) {
    return this._http.get('/ajax/entry/' + entryURLName + '/versions')
      .map((response: Response) => <Version[]>response.json())
      .do(data => console.log(data))
      .catch(this.handleError);
}

在错误处理程序中我有这个:

handleError(error: Response) {
    console.log(error);

    var errorMessage;
    try {
      let errorObj = error.json().error;
      errorMessage = errorObj;
    } catch (e) {
      errorMessage = error.text();
    }

    return Observable.throw(errorMessage);
}

我已在documentation中读到Response对象具有text()方法,该方法将正文作为字符串返回,但实际上error变量不在此处#&# 39;有这个方法。也许我做错了什么?

更新#1

这里是console.log(error);打印的内容(Safari): enter image description here

1 个答案:

答案 0 :(得分:1)

我会利用Content-Type标头知道从有效负载中提取数据:

getVersions(entryURLName: string) {
  return this._http.get('/ajax/entry/' + entryURLName + '/versions')
  .map((response: Response) => {
     if (response.headers['Content-Type']==='application/json') {
       return <Version[]>response.json();
     } else {
       return response.text();
     }
   })
  .do(data => console.log(data))
  .catch(this.handleError);
}

错误回调相同。

在您的情况下,我认为您的map回调存在问题,并且会在catch回调中引发错误(而不是响应本身)。