当前位置: 首页 > Web前端 > JavaScript

SAPSpartacusSSR中的shimming实现示例

时间:2023-03-27 10:05:44 JavaScript

Angular开发人员使用HttpClient与后端服务器进行交互。SAPSpartacusStorefront支持服务器端渲染(SSR),那么工作在SSR模式下的Spartacus是如何调用OCCAPI的呢?通用应用程序使用Angular平台服务器包(platform-server)(相对于平台浏览器platform-b??rowser),它提供DOM、XMLHttpRequest和其他低级浏览器独立特性的服务器端实现。服务端(Angular官网示例中使用Node.jsExpress)将客户端对应用页面的请求传递给NgUniversalngExpressEngine。在引擎盖下,引擎调用Universal的renderModule()函数,同时提供缓存和其他有用的实用程序。renderModule()函数将一个模板HTML页面(通常是index.html)、一个包含组件的Angular模块以及确定要显示哪些组件的路由作为输入。将请求从客户端路由到服务器。下图是SAPSpartacusAppServerModule。我们可以看到他从@angular/platform-server开发包中导入了两个NgModule,ServerModule和ServerTransferStateModule:在Spartacus源码中,虽然renderModule函数是从@angular/platform-server导入的,但是我们并没有调用它明确地在我们的代码中。renderModule()函数将模板HTML页面(通常是index.html)、包含组件的Angular模块以及确定要显示哪些组件的路由作为输入。将请求从客户端路由到服务器。每个请求都会为请求的路由生成适当的视图。renderModule()函数在模板的标记内呈现视图,为客户端创建一个完整的HTML页面。由于通用应用程序不在浏览器中执行,因此服务器上可能缺少某些浏览器API和功能。例如,服务器端应用程序不能引用仅限浏览器的全局对象,例如窗口、文档、导航器或位置。Angular为这些对象提供了一些可注入的抽象,例如Location或DOCUMENT;它可能足以替代这些API。如果Angular不提供它,您可以编写新的抽象,委托给浏览器中的浏览器API,并委托给服务器上的替代实现(也称为shimming)。这是一个使用可注入抽象的SAPSpartacus示例:从@angular/common包导入文档:通过构造函数访问注入:在应用程序代码中使用: