如何给 Spartacus 的 CSR 和 SSR 配置不同的 OCC endpoint

简介: 如何给 Spartacus 的 CSR 和 SSR 配置不同的 OCC endpoint

SAP 官方文档里,对 Commerce Cloud Composable Storefront 的 occ endpoint 配置说明的例子如下:

provideConfig(
      backend: {
        occ: {
          baseUrl: 'https://some.baseUrl.com'
        },
      },
    }),


那么如果想为 SSR 和 CSR 两种运行方式,配置不同的 occ endpoint 应该怎么操作Network?


思路就是,不传一个硬编码的 baseUrl,而是传一个 factory 进去,然后把 baseUrl 的计算逻辑写入到这个 factory 里:

import { PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { OccConfig, provideConfigFactory } from '@spartacus/core';
function myOccConfigFactory(): OccConfig {
  const platformId = inject(PLATFORM_ID);
  const isBrowser = isPlatformBrowser(platformId);
  const baseUrl = isBrowser
    ? 'https://baseUrl.for.browser'
    : 'https://baseUrl.for.ssr';
  return { backend: { occ: { baseUrl } } };
}
/* ... */
@NgModule({
  providers: [
    /* ... */,
    provideConfigFactory(myOccConfigFactory),
  ]
})


下面逐行解释代码的含义:

import { PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { OccConfig, provideConfigFactory } from '@spartacus/core';

这一部分是代码的导入部分,它导入了一些 Angular 和 Spartacus 相关的模块和依赖项,包括 PLATFORM_ID 来检测运行平台,isPlatformBrowser 用于检测是否在浏览器环境中,以及 OccConfigprovideConfigFactory 用于配置 Spartacus 的 OCC(Omni-Channel Commerce)服务。

function myOccConfigFactory(): OccConfig {

这里定义了一个名为 myOccConfigFactory 的函数,它用于创建 OCC 的配置。

const platformId = inject(PLATFORM_ID);

在这一行,它使用 inject 函数获取了当前应用程序的平台标识 platformId,这个平台标识是 Angular 框架提供的用于区分不同平台的标志。

const isBrowser = isPlatformBrowser(platformId);

接下来,它使用 isPlatformBrowser 函数来检查当前应用程序是否在浏览器环境中运行,将结果存储在 isBrowser 变量中。

  const baseUrl = isBrowser
    ? 'https://baseUrl.for.browser'
    : 'https://baseUrl.for.ssr';

这一部分根据前面检测的平台,设置不同的 baseUrl。如果在浏览器环境中,它将使用 'https://baseUrl.for.browser',否则在服务器端渲染(SSR)环境中,它将使用 'https://baseUrl.for.ssr'

return { backend: { occ: { baseUrl } } };

最后,函数返回一个对象,该对象包含了 OCC 后端的配置信息,其中 baseUrl 是根据平台设置的不同 URL。

@NgModule({
  providers: [
    /* ... */,
    provideConfigFactory(myOccConfigFactory),
  ]
})

最后,这段代码位于 Angular 模块的装饰器 @NgModule 内。在模块的提供者数组中,使用 provideConfigFactory 函数注册了 myOccConfigFactory,以便在整个应用程序中提供 OCC 配置。


总结一下,这段代码的主要作用是创建一个工厂函数 myOccConfigFactory,该函数用于配置 Spartacus 应用程序的 OCC 后端连接地址。根据当前应用程序的平台(浏览器或服务器端渲染),它会设置不同的 baseUrl,并将这个配置注册到 Angular 模块中,以供整个应用程序使用。这有助于实现跨平台的配置,以确保在不同环境中正确配置 OCC 后端连接。

相关文章
|
2月前
|
前端开发 JavaScript 开发者
Spartacus 2211 客户成功启用 SSR
Spartacus 2211 客户成功启用 SSR
28 0
|
4月前
|
缓存 前端开发 JavaScript
Spartacus SSR 使用场景里,CDN 应该 cache 哪些类型的页面
Spartacus SSR 使用场景里,CDN 应该 cache 哪些类型的页面
67 0
|
2月前
|
JavaScript 中间件 API
Spartacus 2211 启用 SSR
Spartacus 2211 启用 SSR
20 0
|
28天前
|
API 前端开发 JavaScript
Spartacus 中 saved cart 的 occ API 请求
Spartacus 中 saved cart 的 occ API 请求
17 0
Spartacus 中 saved cart 的 occ API 请求
|
4月前
|
前端开发 API UED
Spartacus SSR 期间使用 browser function 会导致 error,回退到 CSR
Spartacus SSR 期间使用 browser function 会导致 error,回退到 CSR
37 0
|
4月前
|
测试技术 API
使用 jMeter 给 Spartacus SSR 发送 100 个并发的 SSR 请求,全部被 SSR 响应了
使用 jMeter 给 Spartacus SSR 发送 100 个并发的 SSR 请求,全部被 SSR 响应了
30 0
|
4月前
|
存储 前端开发 搜索推荐
Spartacus SSR fallback 成 CSR 时,仍然会在后端继续保持渲染
Spartacus SSR fallback 成 CSR 时,仍然会在后端继续保持渲染
31 0
|
6月前
|
存储 缓存
Spartacus 服务器端渲染(SSR)的 timeout 设置
Spartacus 服务器端渲染(SSR)的 timeout 设置
31 1
|
6月前
|
缓存 自然语言处理 前端开发
Spartacus CSR 渲染模式下的 home page 网络请求
Spartacus CSR 渲染模式下的 home page 网络请求
27 1
|
7月前
|
缓存 负载均衡 前端开发
SAP Spartacus 和 Sticky session 相关的话题
SAP Spartacus 和 Sticky session 相关的话题
39 0