需求客户有多个 JS 店面,并希望将每个店面连接到不同的 API 端点,但默认情况下,所有 JS 店面都绑定到同一个 API。 当前的实现除非显式配置 OCC 基本 URL,否则云门户(Cloud Portal)中的 第一个 API 端点将是与每个 JS Storefront 关联的端点。 解决方案每个 JS Storefront 应用程序都应该使用 index.html 中的元标记明确定义 OCC 基本 URL,例如下面的代码: <meta name="occ-backend-base-url" content="https://my-custom-backend-url:8080" /> 开发人员可以使用特殊的 HTML 元标记配置基本 URL,而不是在 Spartacus 配置中使用 provideConfig() 对其进行硬编码。 这允许您仅使用一个已编译的 JavaScript 应用程序就可以部署到不同的环境,因为您只需为每个环境修改 index.html 文件的元标记。 app.module.ts 中的 provideConfig() 中 backend.occ.baseUrl 的值 优先于 meta 标签中的值,因此如果客户希望 base URL 由 meta 标签动态驱动,请不要定义 provideConfig() 中的 baseUrl。 实际项目中一个常见的问题是,Spartacus 意外通过公共网络而不是内部向 API 服务发送请求。 下列是正常的请求: https://api.<project-name>-<customer-name>-<environment-id>-public.model-t.cc.commerce.ondemand.com/occ/v2 下列是错误的请求: https://api.<customer-domain>.com/occ/v2 引起这个错误的原因是,由于理解错误,occ-backend-base-url 的值被不正确的修改/自定义。 下面是一个错误的实现: <meta name="occ-backend-base-url" content=https://api.<customer-domain>.com/occ/v2 /> 正确实现: <meta name="occ-backend-base-url" content="OCC_BACKEND_BASE_URL_VALUE" /> 只有使用正确的占位符 OCC_BACKEND_BASE_URL_VALUE,在部署到 CCV2 时,这个占位符才能被 API aspect 中的实际的 API endpoint 正确地替换。 有两种配置为 Spartacus 配置 CORS 的方式。 方式1:Local Properties Configuration通过 hac、服务配置或 manifest.json 引用的属性文件更改属性。 方式2:Global CORS configuration在 Backoffice 配置: 第二种配置具有更高的优先级。逻辑在 de.hybris.platform.core.cors.web.DefaultCorsConfigurationSource 中实现, 代码如下。 全局 CORS 配置存储在 CorsConfigurationProperty 项内的数据库中。 这是全局并适用于连接到集群的所有节点。 数据库中的属性优先于本地属性。 如果有相同的属性 context 和 key 在数据库和属性文件中都配置,值取自数据库。 |
|