我试图让斯巴达克斯与SSR合作。打开默认 URL 时,http://localhost:4200,店面会按预期呈现,但只有在我先清除网站数据之后。当我尝试浏览店面时,API 调用失败并显示 504(网关超时(。Chrome 开发工具指示错误发生在服务辅助角色中。在这一点上,我想知道我是否错误地配置了斯巴达克斯。当使用yarn start而不是yarn serve:ssr运行 Spartacus 时,我可以加载主页并正常浏览网站。
OS: Ubuntu 16.04.6 LTS
Chrome Version: 73.0.3683.75
Node version: 11.15.0
Angular CLI version: 8.3.8
Yarn version: 1.19.1
ng new ssr-spartacus-app --style=scss
cd ssr-spartacus-app
ng add @spartacus/schematics --baseUrl https://localhost:9002 --baseSite cmssiteuid --pwa --ssr
rm src/app/app.component.html
echo "<cx-storefront>Loading...</cx-storefront>" > src/app/app.component.html
yarn build:ssr
yarn serve:ssr
在运行 yarn build:ssr 之前,我对 app.module.ts 文件进行了以下更改:
以前
context: {
baseSite: ['cmssiteuid'],
},
后
authentication: {
client_id: 'mobile_android',
client_secret: 'secret',
},
context: {
urlParameters: ['baseSite', 'language', 'currency'],
baseSite: ['cmssiteuid'],
},
我还将匿名同意设置为假。将此设置为 true 后,我收到了很多 COR 错误。
如果这个问题已经挠了一会儿了,我希望对斯巴达克斯的内部运作有更多了解的人可以阐明为什么斯巴达克斯对SSR有这种行为。
我不确定我是否可以为您提供一些解决问题的某些方法,显然我需要与您的问题相关的更多详细信息和日志,但是,根据我的经验,我可以与您分享一些关于我们应该如何处理此类问题的提示和技巧(与 SSR 有关(。
与SSR有关的一些理论
- https://angular.io/guide/universal(您可以随意使用 Angular 官方文档作为主要来源,因为 Spartacus 使用 Angular OOTB 功能使其工作(
- https://sap.github.io/spartacus-docs/server-side-rendering-in-spartacus/
- https://enable.cx.sap.com/tag/tagid/spartacus(SSR 相关视频(
调试 SSR 的实用方法
- 在 Node 中启动应用程序期间,应观察和分析控制台输出.js
- 您可以使用示例店面应用程序 (https://github.com/SAP/spartacus/tree/develop/projects/storefrontapp( 中的 SSR 配置作为起点,因为 OOTB SSR 就像一个魅力
- 斯巴达克斯团队的一些东西 https://sap.github.io/spartacus-docs/how-to-debug-server-side-rendered-storefront/
确保正确配置应用程序的通用理论集
- 用于与斯巴达克斯 https://sap.github.io/spartacus-docs/installing-sap-commerce-cloud/配合使用的 SAP 商务云配置
- 查看指南 https://sap.github.io/spartacus-docs/building-the-spartacus-storefront-from-libraries/以确保您的前端应用程序具有正确的配置
- 仔细检查B2cStorefrontModule正在使用的配置(在这里你可以找到一个示例项目在这里 https://github.com/SAP/spartacus/tree/develop/projects/storefrontapp(
- 查看"网络"和"控制台"浏览器选项卡,并尝试解决所有错误
你关闭了PWA吗?
关闭 PWA。
一旦 Spartacus 以 PWA 模式安装,就会安装一个服务工作线程,它提供 index.html 的缓存版本以及 js 文件。这会导致完全跳过 SSR。以下步骤介绍如何关闭 PWA:
检查您的应用中是否未注册任何服务工作进程。如果确实找到任何服务工作进程,请将其删除。
在应用模块配置中关闭 PWA,如下所示:
StorefrontModule.withConfig({
backend: {
occ: {
baseUrl: 'https://[your_enpdoint],
},
},
pwa: {
enabled: false,
},
};
通过运行以下命令重建本地 Spartacus 库:
yarn build:core:lib
通过运行以下命令构建本地 Spartacus shell 应用:
yarn build --prod
通过运行以下命令生成外壳应用的 SSR 版本:
yarn build:ssr
通过运行以下命令使用 SSR 服务器启动 Spartacus:
yarn serve:ssr
如果您在点击 API 服务后获得 504,则需要检查您的 API 日志。
如果您有错误日志:
{"instant":{"epochSecond":1644915623,"nanoOfSecond":929833000},"thread":"hybrisHTTP1","level":"ERROR","loggerName":"org.springframework.web.servlet.DispatcherServlet","message":"Context initialization failed","thrown":{"commonElementCount":0,"localizedMessage":"Error creating bean with name 'cartEntriesController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'defaultStockValidator' defined in ServletContext resource [/WEB-INF/config/v2/validators-v2-spring.xml]: Unsatisfied dependency expressed through constructor parameter 0: Could not convert argument value of type [de.hybris.platform.ycommercewebservices.stock.impl.DefaultCommerceStockFacade] to required type [de.hybris.platform.commercewebservices.core.stock.CommerceStockFacade]: Failed to convert value of type 'de.hybris.platform.ycommercewebservices.stock.impl.DefaultCommerceStockFacade' to required type 'de.hybris.platform.commercewebservices.core.stock.CommerceStockFacade'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'de.hybris.platform.ycommercewebservices.stock.impl.DefaultCommerceStockFacade' to required type 'de.hybris.platform.commercewebservices.core.stock.CommerceStockFacade': no matching editors or conversion strategy found","message":"Error creating bean with name 'cartEntriesController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'defaultStockValidator'
您可以尝试解决方案:从 manifest.json 中删除模板扩展 ycommercewebservices 扩展,使用"迁移数据"模式重新构建和重新部署。