Angular通用HttpInterceptor运行两次

时间:2019-11-12 12:18:11

标签: angular angular-universal

我目前正在将我的角度应用切换为通用ssr应用。 我的最后一个问题是我的自定义HttpInterceptor触发两次。我正在检查我的api调用的http响应代码,如果出现错误,则会显示弹出窗口。由于我切换到通用,因此两次出现相同的错误弹出窗口。

@Injectable()
export class HttpSetHeaders implements HttpInterceptor {
  constructor(
    @Inject(PLATFORM_ID) private platformId,
    @Inject(LOCAL_STORAGE) private localStorage: any,
    private authService: AuthService,
    private router: Router,
    private notifierService: NotifierService
  ) { }
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log(isPlatformServer(this.platformId))
    ......
}

在每次HTTPClient调用之后,我看到控制台日志输出两次

我已经在我的app.module中导入了TransferHttpCacheModule 和我的app.server.module中的TransferHttpCacheModule

谢谢 马库斯

1 个答案:

答案 0 :(得分:3)

根据https://angular.io/api/common/http/HttpInterceptor

  

要为整个应用程序使用相同的HttpInterceptors实例,请仅在您的AppModule中导入HttpClientModule,然后将拦截器添加到根应用程序注入器中。如果跨不同模块(例如,在延迟加载模块中)多次导入HttpClientModule,则每次导入都会创建HttpClientModule的新副本,该副本将覆盖根模块中提供的拦截器。

让我知道这是否可以解决您的问题。可能是您多次实例化HttpInterceptor。