服务和控制器中的angular4错误处理

时间:2017-11-03 07:50:30

标签: angular error-handling

我有以下问题:

我在服务中有一个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后端关闭时才被命中,而不是当我从服务中抛出错误时。

如何通知控制器请求的响应中存在错误?

其他问题是我可以简单地在控制器中省略结果,只捕获错误吗?

谢谢,

1 个答案:

答案 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。