在 ssr build 的 ngOnInit 中使用拦截器 - Angular 8

Usage of interceptor in ngOnInit in ssr build - Angular 8

我正在使用拦截器来添加 api headers。我在 ngOnInit 函数中调用了一些 apis。对于正常的 ng 服务,它工作得很好。但是在 ssr build and serve 中,api 没有被调用并且页面没有呈现但显示加载。如果我在 ngOnInit 中评论了 api 调用,它就可以工作。我怎么解决这个问题??请帮忙

我的component.ts函数

ngOnInit() {
    this.authController.fetchUser
      .subscribe(
        (params) => {
          this.id = +params['id'];
          this.user = this.authController.getUser(this.id)
        }
      );
  }

fetchUser() 是一个 api 使用拦截器的调用函数。 此功能在 ssr 构建中不起作用。

根据场景,您似乎在 SSR 代码中使用了与客户端相关的内容,这就是您的 API 未被调用并继续加载的原因。

在使用 SSR 时,保持 platformBrowser 检查代码始终是一个好方法,只需更改如下代码 -

 constructor(private router: Router) { }

 ngOnInit() {
    if (isPlatformBrowser(this.platformId)) {
      this.fetchData();
    }
  }

  fetchData() {
    this.authController.fetchUser
      .subscribe((params) => {
        this.id = +params['id'];
        this.user = this.authController.getUser(this.id)
      });
  }