关于 SAP Spartacus 重定向部分外部 url 到后台系统的问题

时间:2022-11-06 08:00:52


许多客户将采用逐步(route-by-route)的方式从 Accelerator 迁移到 spartacus,这意味着客户将使用不同的系统在同一域中同时驱动部分店面。

我们希望支持具有可配置的路由,并可选择从 SPA 中退出并重新加载页面以允许后端驱动的响应(基于 URL 模式)。

只要我们在 SPA 的范围内,我们只执行 ​​interal​​​ 导航,因为使用了 Angular 的 ​​routerLink​​,按照设计它不会进行完全重新加载。

但是,我们可以使用 ​​Guard​​​ 定义​​虚拟路由​​,强制执行指定配置路径的完全重新加载。

为了更容易测试(不要进入闪烁页面重新加载的无限循环),通过扩展 External Routes Guard 来延迟页面重新加载:

@Injectable()
export class CustomRoutingMigrationGuard extends ExternalRoutesGuard{
redirect(route, state) {
console.log('migration guard activated, redirect in 5 seconds');
setTimeout(() => {
super.redirect(route, state);
}, 5000);
}
}

在 app Module 里定义这个 Guard:

providers: [
{ provide: ExternalRoutesGuard, useClass: CustomRoutingMigrationGuard },
]

测试:

routing: {
internal: [
'/**',
'!/cart',
'!/?',
'!/???',
'!/login',
'!/login/register',
'!/product/*/*',
'!/Open-Catalogue/**/p/**',
]
}

验证下面列出的页面是否执行重新加载(由于缺少后端规则而发生无限循环的重新加载,这些规则通常会根据 URL 其模式呈现不同的店面):

/cart
/x
/faq
/abc
/login
/login/register
/product/358639/DSC-N1
/Open-Catalogue/Cameras/DigitalCameras/Digital-Compacts/NV10/p/553637

​https://github.com/SAP/spartacus/issues/12292​关于 SAP Spartacus 重定向部分外部 url 到后台系统的问题

Angular 预配置了 webpack 开发服务,该服务使用开发人员可以配置的代理服务器。如果您有本地运行的 Accelerator,可以为那些应该链接到本地 Accelerator 的路由使用代理配置。 我们需要记录以下内容:

  • 使用代理配置文件配置 angular.json 文件
  • 记录一个示例代理配置
  • 记录一个 package.json 脚本以便于启动

我们还可以使用本地 nginx 记录替代设置。

为了实现这两个店面都在同一个域下,需要设置一个 apache 虚拟主机或其他东西(假设 electronics.local 指向 9002 和 4200)。