【发布时间】:2020-03-04 18:06:12
【问题描述】:
Http调用在初始加载时在angular Universal中进行了两次,我尝试应用传输状态并在我的项目中完成缓存机制,仍然没有任何反应。
if (isPlatformBrowser(this.platformId)) {
return this.http.get(baseApi + '/blog/slug/' + blogId);
} else {
const store = this.state.get(MY_DATA, null);
if (store) {
return store;
}
const myData = this.http.get(baseApi + '/blog/slug/' + blogId);
this.state.set(MY_DATA, myData);
return myData;
}
我是否遗漏了什么,或者有什么我必须包含的内容以避免浏览器调用?提前致谢。
【问题讨论】:
-
只能缓存有状态转移的数据。看起来您正在尝试缓存一个可观察对象。而你的第一个 if 是错误的,这意味着你总是会在客户端进行 http 调用
-
真正的问题是,angular ssr 在从浏览器和服务器初始加载时调用 api 两次。这里我必须限制浏览器调用,所以从我最近的研究中我发现使用这种方式我们可以限制浏览器调用。但是没有任何效果,仍然调用了两次。是否有任何解决方案,因为问题仍然在 Github 中打开?
-
提供网络调用的数据。使用您的浏览器开发工具,转到“网络”选项卡,对通话进行屏幕截图。将屏幕截图添加到问题中。
-
在我的网络中,我可以看到一个额外的 api 调用。所以这里一个 api 调用是由服务器和另一个客户端进行的,附加的网络调用截图也是如此
标签: angular typescript express server-side-rendering angular-universal