使用HTTPErrorResponse处理HTTP错误 - 组件或服务?

时间:2018-04-26 13:48:07

标签: angular error-handling

在Angular中,有一种常见的方法可以通过使用HttpErrorResponse来处理http错误,如我所见?这是真的吗?

我想知道的第二件事是我应该在哪里使用这个,在我正在进行API调用的服务中,还是在我调用服务的组件中?

  

组件中的错误处理:

enter image description here

  

服务中的错误处理:

@Injectable()
export class ArticleService {

  constructor(private _http: HttpClient) { }

  private apiUrl = environment.apiUrl;

  getArticles(): Observable<People[]> {
    return this._http.get<People>(this.apiUrl + '/People/GetAll')
      .catch(this.handleError);
  }
  private handleError(err: HttpErrorResponse) {
    console.log(err.message);
    return Observable.throw(err.message);
  }

所以我想知道哪些方法更好,并且通过遵循Angular文档更多约定?

为什么?

非常感谢!

2 个答案:

答案 0 :(得分:1)

  

在Angular中,有一种通过使用HttpErrorResponse

来处理http错误的常用方法

→是和否。

这很常见,但这不是最佳做法。

最佳做法是使用interceptor,如此:

export class ErrorHandlerService implements HttpInterceptor {

  constructor() {}

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next
      .handle(req)
      .catch((err: HttpErrorResponse) => {...});
  }

}

至于你的功能的位置,使用拦截器可以解决这个问题,但是让我想起最佳实践:

→您应该将模板相关逻辑保留在组件中,以及服务中与业务相关的逻辑。

我不记得文档中的确切位置,但我完全肯定。 编辑 Here it is.

答案 1 :(得分:0)

您应该使用Angular ErrorHandler https://angular.io/api/core/ErrorHandler

处理全局错误处理程序中的错误

创建一个实现ErrorHandler并在那里处理错误的新类。我在制作中使用这种方法。以这种方式设置错误消息并抛出错误,它将命中全局错误处理程序。您可以通过任何通知服务通知用户(例如:Toastr)。此外,如果需要,请记录错误。您不必多次在整个应用程序中重复编写相同的代码。

相关问题