这个 Storefront 的本地地址:C:\Code\SPA\spa3.1\mystore31
基于的 SAP Spartacus 版本:大于 3.1.3,小于 4.0:
查看 package-lock.json 或者 yarn.lock, 得知安装的实际版本是 3.4.1:
命令行:ng add @spartacus/schematics --ssr
自动添加了如下的资源:
添加了一个 AppRoutingModule:
main.server.ts:
app.server.module.ts:
增加文件的具体细节,参考这个 commit:
https://github.com/wangzixi-diablo/mystore31/commit/5a06fc7a904b8d0042497077f6f7a46398a975ec最后使用这两个命令:
npm run build:ssr && npm run serve:ssr
我先执行 ng build:
执行 ng run mystore31:serve-ssr,进行服务器端的 build:
启动服务器:
node dist/mystore31/server/main.js
如何调试
package.json 里加上一个配置:
"ssrdebug": "node --inspect-brk dist/jerryssr/server/main.js",
1
npm run ssrdebug
打开 Chrome,地址栏输入 chrome://inspect/#devices:
点击 inspect:
错误消息:
An unknown http error occurred
通过调试,能找到这条错误消息的抛出位置:
看看这个 url 是不是在浏览器里能直接访问:
https://20.51.210.49:9002//occ/v2/basesites?fields=baseSites(uid,defaultLanguage(isocode),urlEncodingAttributes,urlPatterns,stores(currencies(isocode),defaultCurrency(isocode),languages(isocode),defaultLanguage(isocode)),theme)答案是不行:
解决了上图 ERR_CERT_AUTHORITY_INVALID 错误之后,仍然报同样的错误:
解决方案
在 node 启动命令前,加上参数:
cross-env NODE_TLS_REJECT_UNAUTHORIZED=0
原始的错误 An unknown http error occurred 消失了,出现了新错误:
修改 server.ts, 将超时参数设置为0,即永不超时:
const ngExpressEngine = NgExpressEngineDecorator.get(engine, { timeout: 0 });
执行 ng run mystore31:serve-ssr,重新 build,问题消失: