角度拦截器根据响应路由到不同的路径

2023-12-29

我正在玩 Angular 拦截器,如果响应状态是,我想重新路由401以下是我尝试过的。

@Injectable()
export class AuthInterceptorService implements HttpInterceptor {

  constructor(private _localStorageService: LocalStorageService, private _router: Router, private _location: Location) { }


  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.url.includes("/login")) {
      return next.handle(req);
    }
    let authToken: LocalStorage = this._localStorageService.getItem('auth-token');
    if (authToken) {
      return next.handle(
        req.clone({
          headers: req.headers.append('Authorization', 'jwt ' + authToken.value)
        })
      ).pipe(tap((response: HttpResponse<any>) => {
        console.log(response);
        if (response instanceof HttpResponse) {
          if (response.body.status == 401) {
            this._router.navigate([Routes.LOGIN]);
            return response;
          }
        }
      }));
    }
    this._router.navigate(['/login']);
  }
}

这个过程正在工作,但是每当路线改变时,我都会在 chrome 开发控制台中得到这个:错误您在需要流的地方提供了“未定义”。您可以提供 Observable、Promise、Array 或 Iterable。

我该如何防止这种情况?我做错了什么?


此错误始终指的是缺少或错误的返回值,在您的情况下,在某些时候,拦截方法不会返回可观察值,而是不返回任何内容或其他内容。然后,该可观察量被 Angular 内部使用,并且由于它不是可观察量,因此失败。例如。如果你的authToken未定义,则不会返回任何内容,因此拦截方法的结果是未定义的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

角度拦截器根据响应路由到不同的路径 的相关文章

随机推荐