Angular 开发人员应用 HttpClient 与后盾服务器交互。SAP Spartacus Storefront 反对服务器端渲染即 SSR,那么工作在 SSR 模式下的 Spartacus,又是通过什么形式调用的 OCC API 呢?
通用应用程序 (Universal applications
) 应用 Angular 平台服务器包 (platform-server
)(与平台浏览器 platform-browser
绝对),它提供 DOM、XMLHttpRequest 和其余不依赖浏览器的底层个性的服务器端实现。
服务器(在 Angular 官网例子中应用的是 Node.js Express)将客户端对应用程序页面的申请传递给 NgUniversal ngExpressEngine。在底层,该引擎调用 Universal 的 renderModule() 函数,同时提供缓存和其余有用的实用程序。
renderModule() 函数将模板 HTML 页面(通常是 index.html)、蕴含组件的 Angular 模块和确定要显示哪些组件的路由作为输出。路由来自客户端对服务器的申请。
下图是 SAP Spartacus AppServerModule
,咱们能够看到他导入了来自 @angular/platform-server
开发包的 ServerModule
和 ServerTransferStateModule
这两个 NgModule:
在 Spartacus 源代码里,尽管从 @angular/platform-server
导入了 renderModule
函数,然而没有在咱们的代码里显式调用它。
renderModule() 函数将模板 HTML 页面(通常是 index.html)、蕴含 Component 的 Angular modules 和确定要显示哪些组件的路由作为输出。路由来自客户端对服务器的申请。
每个申请都会为申请的路由生成适当的视图。renderModule() 函数在模板的 <app>
标记内渲染视图,为客户端创立一个残缺的 HTML 页面。
因为通用应用程序不在浏览器中执行,因而服务器上可能短少某些浏览器 API 和性能。
例如,服务器端应用程序不能引用仅限浏览器的全局对象,例如窗口、文档、导航器或地位。
Angular 为这些对象提供了一些可注入的形象,例如 Location 或 DOCUMENT;它可能会充沛代替这些 API。如果 Angular 不提供它,则能够编写新的形象,在浏览器中委派给浏览器 API,在服务器上委派给代替实现(也称为 shimming)。
上面是 SAP Spartacus 应用可注入形象的一个例子:
- 从
@angular/common
包中导入DOCUMENT
:
- 通过构造函数进入注入:
- 在利用代码中应用: