Angular 开发人员使用 HttpClient 与后台服务器交互。SAP Spartacus Storefront 支持服务器端渲染即 SSR,那么工作在 SSR 模式下的 Spartacus,又是通过什么方式调用的 OCC API 呢? 通用应用程序( 服务器(在 Angular 官网例子中使用的是 Node.js Express)将客户端对应用程序页面的请求传递给 NgUniversal ngExpressEngine。 在底层,该引擎调用 Universal 的 renderModule() 函数,同时提供缓存和其他有用的实用程序。 renderModule() 函数将模板 HTML 页面(通常是 index.html)、包含组件的 Angular 模块和确定要显示哪些组件的路由作为输入。路由来自客户端对服务器的请求。 下图是 SAP Spartacus 在 Spartacus 源代码里,虽然从 renderModule() 函数将模板 HTML 页面(通常是 index.html)、包含 Component 的 Angular modules 和确定要显示哪些组件的路由作为输入。路由来自客户端对服务器的请求。 每个请求都会为请求的路由生成适当的视图。renderModule() 函数在模板的 由于通用应用程序不在浏览器中执行,因此服务器上可能缺少某些浏览器 API 和功能。 例如,服务器端应用程序不能引用仅限浏览器的全局对象,例如窗口、文档、导航器或位置。 Angular 为这些对象提供了一些可注入的抽象,例如 Location 或 DOCUMENT; 它可能会充分替代这些 API。 如果 Angular 不提供它,则可以编写新的抽象,在浏览器中委派给浏览器 API,在服务器上委派给替代实现(也称为 shimming)。 下面是 SAP Spartacus 使用可注入抽象的一个例子:
|
|