我有以下问题:
我在服务中有一个http post请求。 请求返回一个对象:
export interface IResponse<T> {
Error:boolean
ErrorMessage:string
Data:T
}
如果在php或mysql中生成错误,则使用消息将boolean设置为true。 来自服务的请求:
searchPersons(personSearchObject:PersonSearchObject){
//generate request here
return this.http.post(Config.ServerUrl, "data="+ request, options)
.map( (responseData) => {
this.personResponse = responseData.json()
if (!this.personResponse.Error){
this.persons.next(this.personResponse.Data)
return;
} else {
console.log(this.personResponse.ErrorMessage)
return Observable.throw(new Error(this.personResponse.ErrorMessage))
}
})
}
从控制器调用请求:
this.personSearchService.searchPersons(personSearchObject).subscribe(
result => {},
error => {
console.log("There was an error");
})
}
现在的问题是错误=&gt;在控制器中只有当例如php后端关闭时才被命中,而不是当我从服务中抛出错误时。
如何通知控制器请求的响应中存在错误?
其他问题是我可以简单地在控制器中省略结果,只捕获错误吗?
谢谢,
答案 0 :(得分:1)
你绝对应该修复你的后端,以便它返回实际的错误响应。但无论如何,你的代码应该是:
searchPersons(personSearchObject:PersonSearchObject) {
return this.http.post(Config.ServerUrl, "data="+ request, options)
.switchMap(response => {
const personResponse = response.json()
if (!personResponse.Error) {
return Observable.of(personResponse.Data);
}
else {
return Observable.throw(new Error(personResponse.ErrorMessage));
}
});
}
请注意,不推荐使用Http服务。你应该切换到HttpClient。