首页 > 其他分享 >如何给 Spartacus 的 CSR 和 SSR 配置不同的 OCC endpoint

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

时间:2023-11-13 19:22:53浏览次数:38  
标签:endpoint const Spartacus OCC baseUrl isPlatformBrowser myOccConfigFactory https

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 后端连接。

标签:endpoint,const,Spartacus,OCC,baseUrl,isPlatformBrowser,myOccConfigFactory,https
From: https://www.cnblogs.com/sap-jerry/p/17829911.html

相关文章

  • Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionExcept
    在AndroidStudio的Helloword在增加了个部局XML内容后报错,如下错误:Causedby:org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException:Afailureoccurredwhileexecutingcom.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResource......
  • .NET 8 IEndpointRouteBuilder详解
    Map​ 经过对WebApplication的初步剖析,我们已经大致对Web应用的骨架有了一定了解,现在我们来看一下HelloWorld案例中仅剩的一条代码:app.MapGet("/",()=>"HelloWorld!");//3添加路由处理​ 老规矩,看签名:publicstaticRouteHandlerBuilderMapGet(thisIEndpointRout......
  • Java jar: A JNI error has occurred, please check your installation and try again
    java-verion和javac-version版本不一致 E:\temp\eclipseWorkSpace>java-jarTASTS.jarExceptioninthread"main"java.lang.NoClassDefFoundError:org/eclipse/swt/widgets/DecorationsCausedby:java.lang.ClassNotFoundException:org.eclipse.swt.widge......
  • F. Unique Occurrences(线段树分治+可撤销并查集)
    F.UniqueOccurrences假如我们删除所有权值为x的边,那么所有权值为x的边对答案的贡献就是\(\sumsz[u]*sz[v]\)sz表示两个联通块的大小,且(u,v)的边权为x我们可以用可撤销并查集来进行处理,简单来说就是将一条边的存在时间看作区间,然后挂到线段树上,然后遍历到每个叶子的时候进行......
  • Spartacus lazy loading 模块中的配置管理
    如果在懒加载模块中提供了额外的配置,组合商店前端将其合并到全局应用配置中,以支持现有组件和服务的懒加载场景。在大多数情况下,尤其是当懒加载模块主要提供默认配置时,这种方式都能可靠地工作。然而,如果过度使用,特别是当两个模块为配置的同一部分提供不同的配置时,可能会导致问题。......
  • FreeSWITCH添加自定义endpoint之api及app开发
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9之前写过FreeSWITCH添加自定义endpoint的文章,今天整理下api及app开发的笔记。历史文章可参考如下链接:FreeSWITCH添加自定义endpointFreeSWITCH添加自定义endpoint之媒体交互一、常用函数介绍这里列举下开发过程中常用的函数。1......
  • EF出现错误:An error occurred while updating the entries. See the inner exception
    问题:EF出现错误Anerroroccurredwhileupdatingtheentries.Seetheinnerexceptionfordetails场景:适用Excel批量导入数据时,提示了以上错误解决思路:1、查看是否有重复的主键2、是否有不可为空的字段没有赋值3、字段内容是否超出长度限制......
  • Pset_SpaceOccupancyRequirements
    Pset_SpaceOccupancyRequirements空间占用要求:与在一个或一组类似的空间结构元素内发生或预计发生的工作活动有关的属性。 NameTypeDescriptionOccupancyTypeP_SINGLEVALUE / IfcLabelNutzungsartNutzungsartdesRaumsgemäßdergültigenRaumnutzungstabe......
  • 编译 Spartacus 6.0 时遇到的错误消息
    错误消息如下:CompilingwithAngularsourcesinIvypartialcompilationmode.projects/storefrontlib/shared/components/generic-link/generic-link.component.html:22:6-errorTS2322:Type'string|null'isnotassignabletotype'string|undefine......
  • 205-303 K8S API资源对象介绍03 (Job CronJob Endpoint ConfigMap Secret) 2.17-3.3
    一、水平自动扩容和缩容HPA(K8S版本>=1.23.x)HPA全称HorizontalPodAutoscaler,Pod水平自动伸缩,HPA可以基于CPU利用率replicationcontroller、deployment和replicaset中的pod数量进行自动扩缩容。pod自动缩放对象适用于无法缩放的对象,比如DaemonSetHPA由KubernetesAPI资源和控......