我正在玩 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(使用前将#替换为@)