Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务和控制器中的angular4错误处理_Angular_Error Handling - Fatal编程技术网

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

服务和控制器中的angular4错误处理,angular,error-handling,Angular,Error Handling,我有以下问题: 我在服务中有一个http post请求。 请求返回一个对象: export interface IResponse<T> { Error:boolean ErrorMessage:string Data:T } 从控制器调用请求: this.personSearchService.searchPersons(personSearchObject).subscribe( result => {},

我有以下问题:

我在服务中有一个http post请求。 请求返回一个对象:

export interface IResponse<T> {
    Error:boolean
    ErrorMessage:string
    Data:T
}
从控制器调用请求:

 this.personSearchService.searchPersons(personSearchObject).subscribe(
                result => {},
                error => { 
                    console.log("There was an error");
            })
        }
现在的问题是,控制器中的错误=>只有在php后端关闭时才会出现,而不是在我从服务抛出错误时

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

另一个问题是,我是否可以在控制器中忽略结果,而只捕获错误


谢谢,

您肯定应该修复后端,以便它返回实际的错误响应。但无论如何,您的代码应该是:

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。

如果您的后端不是返回状态为200 success的响应,而是返回一个指示实际上存在错误的主体,而是遵守HTTP标准并返回状态为500 internal error的实际错误响应,那么一切都会变得容易得多。你为什么不那样做呢?谢谢你。现在探索HTTPClient,这又提出了一系列问题,但将继续探索。
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));
      }
    });
}