【问题标题】:How to correctly implement a HTTP Interceptor in Angular 8?如何在 Angular 8 中正确实现 HTTP 拦截器?
【发布时间】:2019-08-16 13:23:46
【问题描述】:

当请求中的 http 状态代码为 401 时,我正在尝试将用户重定向到登录。但是按照许多网站的说明,catchError 不起作用。

这是我的实际代码。

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(request).pipe(
            map((event: HttpEvent<any>) => {

                console.log('OK test');

                if (event instanceof HttpResponse) {
                    // OK
                }
                return event;
            }), catchError((error: HttpErrorResponse) => {

                console.log('non-OK test');

                if (error.status === 401) {
                    LocalStorageService.deslogar();
                    this.router.navigate(['/autenticacao/login']);
                } else if (error.status === 403) {
                    // Forbidden
                } else if (error.status === 404) {
                    // Not Found
                }
                return throwError(error);
            }));
    }

他的结果:

【问题讨论】:

标签: angular


【解决方案1】:

正如上面评论中提到的,你不应该在重定向的情况下抛出错误。 在这些情况下返回 empty() observable 应该可以解决问题。

【讨论】:

  • 这不是问题。问题是请求返回永远不会进入 catchError 块。即使我把return empty()放了也行不通,因为这行代码没有到达。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 2023-03-13
  • 2020-03-20
  • 1970-01-01
相关资源
最近更新 更多