我有一个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 :
答案 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
回调中引发错误(而不是响应本身)。