不能使HTTP拦截器在角度工作

时间:2019-08-19 02:58:15

标签: angular http angular-http-interceptors

我有以下拦截器

export class JwtInterceptor implements HttpInterceptor, OnDestroy {

  authKey: string;
  subscription: Subscription;

  constructor(private store$: Store<RootStoreState.IAppState>) {
    this.subscription = this.store$.pipe(select(AuthStoreSelectors.authKey)).subscribe((key) => {
      this.authKey = key;
    });
  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log('here', this.authKey)
    // add authorization header with jwt token if available
    if (this.authKey) {
      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${this.authKey}`
        }
      });
      return next.handle(request);
    }
    return null;
  }

  ngOnDestroy() {
    this.subscription.unsubscribe();
  }
}

我这样打我的http呼叫

  constructor(@Inject(HttpClient) private httpClient: HttpClient) {}

  saveMission(params: apiModels.SaveMissionRequest): Observable<apiModels.SaveMissionResponse> {
    return this.httpClient.post<any>(`${environment.API_URL}/mission/save_mission`, params);
  }

现在,我尝试在angular中注册我的拦截器,所以我用

更新我的app.module。
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: JwtInterceptor,
      multi: true
    }
  ],

但是控制台中出现以下错误

  

compiler.js:2430未捕获的错误:InjectionToken的提供程序无效   HTTP_INTERCEPTORS。 useClass不能是未定义的。              通常在以下情况下发生:              1.存在循环依赖关系(可能是由于使用index.ts(桶形)文件引起的)。              2.在声明之前使用了类。在这种情况下,请使用forwardRef。

它已正确导入文件中,所以我认为是这种情况2,但是如果使用forwardRef,则会出现很多错误

  

错误TypeError:jit_val_130不是构造函数正在加载图标集   网址:/assets/icons/mdi.svg失败:jit_val_130不是构造函数

但是在我添加此前向引用之前从未发生过此错误,因此即使它看起来像是svg错误,也可能会导致应用模块崩溃。

0 个答案:

没有答案