[英]How can I handle a 401 Unauthorized response differently from other errors in an Angular 8 service using RxJS?
我有一个 REST API,它要求用户在每次调用时通过访问令牌进行识别。
如果令牌未提供或已过期,则每个 API 端点都会返回 401 UNAUTHORIZED 响应。
在某些情况下,我使用计时器调用 API。
在我的服务类中:
getFoo(id: String): Observable<Foo> {
return this.http.get<Foo>(url, HTTP_OPTIONS);
}
getFooList(): Observable<Foo[]> {
return timer(0, FIVE_MINUTES).pipe(
switchMap(() => this.http.get<Foo[]>(url, HTTP_OPTIONS))
);
}
然后在我的组件中
fooList: Foo[] = [];
ngOnInit(): void {
this.loadFooList();
}
private loadFooList() {
this._fooService.getFooList().subscribe(
(fooList) => this.fooList = fooList,
(err) => console.error(err)
);
}
如何检查服务本身是否收到 401 响应? 而不是必须在使用服务的每个组件中执行此操作?
我使用了拦截器。
auth.interceptor.ts
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(
private _router: Router,
) { }
intercept(httpRequest: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(httpRequest).pipe(
catchError((error) => {
if (error.status == 401) {
this._router.navigate(['/login']);
} else {
return Observable.throw(error);
}
})
);
}
}
在我的app.module.ts 中添加它作为提供者
@NgModule({
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
},
],
bootstrap: [AppComponent,]
})
export class AppModule { }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.