头图

需求

客户有多个 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 在数据库和属性文件中都配置,值取自数据库。


注销
1k 声望1.6k 粉丝

invalid