小编mic*_*ael的帖子

Angular 7错误拦截器–原始通话出现问题

Angular 7错误拦截器–原始调用存在问题我编写了一个拦截器来捕获所有401错误。如果发生此类错误,则应尝试获取新的JWT令牌,如果可行,请重复原始请求。到目前为止,拦截器已经起作用。我的问题是,在我给它新令牌后发出的原始请求不会在附加到原始可观察对象的订阅中再次终止。

原始要求

零件:

this.serviceModel.getSearchItems(si).subscribe(res => {
   this.resultData = res;
});
Run Code Online (Sandbox Code Playgroud)

服务模型

public getSearchItems(si: SearchInfo): Observable<VoList<SearchResultItemVO>> {
   return this.post<VoList<SearchResultItemVO>>(`/api/Search/GetSearchItems`, si, null,  SearchResultItemVO);
}
Run Code Online (Sandbox Code Playgroud)

拦截器

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
  constructor(private serviceModel: SharedAccountServiceModel) {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).catch(err => {
      return this.handleError(err, request, next);
    });
  }
  handleError(err, request: HttpRequest<any>, next: HttpHandler) {
    if (err.status === 401) {
      if (!!localStorage.getItem('auth_token') &&     !!localStorage.getItem('refresh_token')) {
        this.serviceModel.refreshlogin().switchMap(res => {
          return next.handle(this.addAuthenticationToken(request));
    })
    .subscribe();
  }
  else {
    localStorage.removeItem('accessinfo');
    localStorage.removeItem('auth_token');
    localStorage.removeItem('userid'); …
Run Code Online (Sandbox Code Playgroud)

http-status-code-401 angular-http-interceptors angular

3
推荐指数
1
解决办法
3564
查看次数