在Angular中,有一种常见的方法可以通过使用HttpErrorResponse来处理http错误,如我所见?这是真的吗?
我想知道的第二件事是我应该在哪里使用这个,在我正在进行API调用的服务中,还是在我调用服务的组件中?
组件中的错误处理:
服务中的错误处理:
@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文档更多约定?
为什么?
非常感谢!
答案 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)。此外,如果需要,请记录错误。您不必多次在整个应用程序中重复编写相同的代码。