v0.1.1
本地 ABP 后端用自签证书时,bun run dev 打开首页得到 500,页面上只有一句 fetch failed。这个版本让它说人话,并把文档里缺的那半边补上。
为什么会这样
TLS 那一跳的客户端是 Node,不是浏览器:
浏览器 ──HTTP──> localhost:3000 (TanStack Start / Node)
└──HTTPS──> localhost:44316 (ABP) ← TLS 在这里
dotnet dev-certs https --trust 把证书装进系统钥匙串,浏览器与 curl 因此放行。Node 不读钥匙串,只校验自己内置的 CA 列表,于是拒绝 CN=localhost 这张自签证书。
| CA 来源 | 结果 | |
|---|---|---|
| curl / 浏览器 | 系统钥匙串 | 200 |
| Node | 内置 Mozilla 列表 | DEPTH_ZERO_SELF_SIGNED_CERT |
Node + NODE_EXTRA_CA_CERTS |
内置列表 + 这一张 | 200 |
怎么办
dotnet dev-certs https --export-path ~/.aspnet-dev.crt --format PEM
NODE_EXTRA_CA_CERTS=~/.aspnet-dev.crt npx jc-abp gen
NODE_EXTRA_CA_CERTS=~/.aspnet-dev.crt bun run dev这个变量不能写进 .env。 Node 在进程启动时读它,dotenv 加载时已经太晚——写了不生效,且没有任何提示。放命令上,或 export 进 shell profile。
NODE_TLS_REJECT_UNAUTHORIZED=0 同样能跑通,写进 .env 也有效,但它关掉的是整个进程对所有主机的证书校验。临时试可以,别留在会被复制到服务器的文件里。
改了什么
@jcoder-stack/abp-react —— 代理识别 OpenSSL 的证书信任失败码后:
- 不再重试。 证书不受信是确定性失败,原先的两次重试只是把同一次握手重做两遍,还把原因埋在退避后面。
- 给出可执行的说明,指名
NODE_EXTRA_CA_CERTS与被拒的 origin,原始错误保留在cause上。
@jcoder-stack/registry —— .env.example 补上运行时的这条要求,并写明上面两个变量的差异。
@jcoder-stack/cli —— init 结束时打印的接线提示同样覆盖 dev,不再只提 gen。
文档 —— 初始化指南新增「自签证书的本地后端」一节,排障表补两行,starter README 与 .env.example 同步。此前全部 5 处 TLS 说明都只在 gen 的语境下,运行时只字未提,这正是踩坑的直接原因。
升级
bun add @jcoder-stack/abp-react@0.1.1
bun add -D @jcoder-stack/cli@0.1.1 @jcoder-stack/registry@0.1.1没有破坏性改动。已经装好块的项目不需要重跑 init——想拿新的 .env.example 注释,从 node_modules/@jcoder-stack/registry/auth/root/.env.example 对照即可。