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

时间:2019-10-14 14:09:47

标签: angular interceptor angular8 angular-universal

我正在使用拦截器添加api标头。我在ngOnInit函数中调用了一些API。对于正常的服务来说,它工作正常。但是在ssr生成和服务中,不会调用api,也不会呈现页面,但会显示正在加载。如果我评论了ngOnInit中的api调用,则可以正常工作。我怎么解决这个问题??请帮忙。

我的component.ts函数

response = requests.request(
    "POST", 
    "http://XXX.XXX.XXX.XXX/fw2", 
    data=payload, 
    files={files["file"].name : (files["file"].filename, files["file"].file, files["file"].mimetype)}
)

fetchUser()是使用拦截器的api调用函数。 此功能不适用于ssr构建。

1 个答案:

答案 0 :(得分:1)

根据情况,您似乎在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)
      });
  }