Angular HttpClient Errorhandler最好的方法

时间:2018-05-28 11:38:55

标签: angular

处理错误的最佳方法是什么 在HttpClient中。

这可能是一个好方法吗?

我的目标是避免设置相同 所有服务中一遍又一遍的方法。

export class HttpErrorHandler {
  static handleError(error: HttpErrorResponse) {
    let errorMessage = '';
    if (error.error instanceof ErrorEvent) {
      errorMessage =  error.error.message;
    } else {
      const errorMessage = `Server returned code: ${error.status}, error message is: ${error.error}`;
    }
    const msg = environment.production ? 'Something bad happened; please try again later.' : errorMessage;
    return throwError(msg);
  }
}

或像

这样的ErrorHandler
@Injectable()
export class ErrorsHandler implements ErrorHandler {
  handleError(error: Error | HttpErrorResponse) {   
   if (error instanceof HttpErrorResponse) {
      // Server or connection error happened
      if (!navigator.onLine) {
        // Handle offline error
      } else {
        // Handle Http Error (error.status === 403, 404...)
      }
   } else {
     // Handle Client Error (Angular Error, ReferenceError...)     
   }
  // Log the error anyway
  console.error('It happens: ', error);
}

1 个答案:

答案 0 :(得分:0)

试试这个...这是根据您的要求处理错误的最佳方法。只需要在服务类中创建一个方法,如下所示。

 public errorHandler(err: HttpErrorResponse) : Observable<any>
  {
    if (err.error instanceof Error)
    {
      console.error("Client-side error occured.",err.status,err.error.message);
      console.error(JSON.stringify(err.error));
    }
    else 
    {
      console.error("Server-side error occured.",err.status,err.error.message);
      console.error(JSON.stringify(err.error));   
    }

    return ErrorObservable.throw(err || 'ERROR');
  }

从组件类访问时,只需订阅方法以更好的方式处理错误,如下所示

     .subscribe(
        res => {
               console.log(res) ;
               },
        err => { 
                //**here you do action whatever you want like this** if(err.status==409){}else{}
               }
            );

。在此,您不必为每次休息调用创建errorHandler。您只需要订阅它并对特定的HttpError执行操作