Javascript Angular 2 API服务显示错误UI消息

Javascript Angular 2 API服务显示错误UI消息,javascript,angular,angular-services,angular-httpclient,Javascript,Angular,Angular Services,Angular Httpclient,我不熟悉Angular 2,所以如果这个问题很傻,请原谅 我必须从服务器获取数据并将其显示在组件中。服务器有一些API方法,因此我创建了API.service.ts,如下所示: this.apiService.getGeneralReport().subscribe( data => { this.generalInfo = data; // Display the received data }, err => { // yourPopu

我不熟悉Angular 2,所以如果这个问题很傻,请原谅

我必须从服务器获取数据并将其显示在组件中。服务器有一些API方法,因此我创建了
API.service.ts
,如下所示:

this.apiService.getGeneralReport().subscribe(
  data => {
    this.generalInfo = data;
    // Display the received data
  }, 
   err => {
      // yourPopupmethod(err)
   }
);
从'@angular/core'导入{Injectable};
从'@angular/common/http'导入{HttpClient};
从“rxjs/Observable”导入{Observable};
导入'rxjs/add/operator/map';
导入“rxjs/add/operator/catch”;
const协议='http';
const domain='mydomain.ng';
常量端口=':4200';
@可注射()
出口级服务{
构造函数(私有http:HttpClient){}
buildQuery(apiMethod:string){
返回`${protocol}://${domain}${port}/${apiMethod}`;
}
get(apiMethod:string):可观察{
const query=this.buildQuery(apiMethod);
返回此.http.get(查询)
.地图(
resp=>{
如果(分别正常){
返回响应;
}else{//服务器返回了一个错误
//这里我需要显示组件中的UI错误
}
}
)
.catch(//错误在客户端
错误=>{
//这里我需要显示组件中的UI错误
}
);
}
getGeneralReport():可观察{
返回此.get('generalReport');
}

}
是的,这是可能的,这样做:

this.apiService.getGeneralReport().subscribe(
  data => {
    this.generalInfo = data;
    // Display the received data
  }, 
   err => {
      // yourPopupmethod(err)
   }
);
和在役抛出错误。因此,通过添加HandleError方法更新您的服务:

handleError(error: Response | any) {
     return Observable.throw(new Error(error.status))
}

  get(apiMethod: string): Observable<Response> {

    const query = this.buildQuery(apiMethod);

    return this.http.get<Response>(query)
       .map(
           resp => {
              if (resp.ok) {
                 return resp;
              } else { // Server returned an error
                 this.handleError(resp);
                }
           }
         )
       .catch(
          err => {
             this.handleError(err);
          }
      );
    }
handleError(错误:响应|任意){
返回可观察的抛出(新错误(错误状态))
}
get(apiMethod:string):可观察{
const query=this.buildQuery(apiMethod);
返回此.http.get(查询)
.地图(
resp=>{
如果(分别正常){
返回响应;
}else{//服务器返回了一个错误
这是handleError(resp);
}
}
)
.接住(
错误=>{
这个.handleError(err);
}
);
}

是的,这是可能的,这样做:

this.apiService.getGeneralReport().subscribe(
  data => {
    this.generalInfo = data;
    // Display the received data
  }, 
   err => {
      // yourPopupmethod(err)
   }
);
和在役抛出错误。因此,通过添加HandleError方法更新您的服务:

handleError(error: Response | any) {
     return Observable.throw(new Error(error.status))
}

  get(apiMethod: string): Observable<Response> {

    const query = this.buildQuery(apiMethod);

    return this.http.get<Response>(query)
       .map(
           resp => {
              if (resp.ok) {
                 return resp;
              } else { // Server returned an error
                 this.handleError(resp);
                }
           }
         )
       .catch(
          err => {
             this.handleError(err);
          }
      );
    }
handleError(错误:响应|任意){
返回可观察的抛出(新错误(错误状态))
}
get(apiMethod:string):可观察{
const query=this.buildQuery(apiMethod);
返回此.http.get(查询)
.地图(
resp=>{
如果(分别正常){
返回响应;
}else{//服务器返回了一个错误
这是handleError(resp);
}
}
)
.接住(
错误=>{
这个.handleError(err);
}
);
}

谢谢你的回答。但是由于我将有很多组件,它们将使用api.service,因此我需要将所有错误处理代码放入服务中,以避免代码重复。这可能吗?顺便问一下,如果(resp.ok){return resp;}否则{}检查服务器是否返回错误的方法不正确如果它发送的状态不是200,它将被catch block捕获是的,我的错,谢谢。现在,看看你对这个问题的回答,这几乎就是我想要的。但是现在是否可以避免在所有组件中编写
//yourPopupmethod(err)
?或者这也可以通过服务来完成?例如,如果我将组件的引用传递给服务构造函数?@NikitaMarinosyan brat of ource,这是可能的,但不是您的思维方式。您应该创建某种NotificationService,它具有例如发出通知的方法
notifyError(text)
。然后,您应该将它注入可能有错误的组件中,并且无论何时出现错误,都可以调用notificationService.notifyError(errortext)。谢谢您的回答。但是由于我将有很多组件,它们将使用api.service,因此我需要将所有错误处理代码放入服务中,以避免代码重复。这可能吗?顺便问一下,如果(resp.ok){return resp;}否则{}检查服务器是否返回错误的方法不正确如果它发送的状态不是200,它将被catch block捕获是的,我的错,谢谢。现在,看看你对这个问题的回答,这几乎就是我想要的。但是现在是否可以避免在所有组件中编写
//yourPopupmethod(err)
?或者这也可以通过服务来完成?例如,如果我将组件的引用传递给服务构造函数?@NikitaMarinosyan brat of ource,这是可能的,但不是您的思维方式。您应该创建某种NotificationService,它具有例如发出通知的方法
notifyError(text)
。然后,您应该将其注入可能有错误的组件中,并且无论何时出现错误,您都可以调用notificationService.notifyError(errortext)。