Skip to content

v0.1.1

Choose a tag to compare

@jcoder-stack jcoder-stack released this 02 Aug 11:10
· 53 commits to main since this release
37f5e9b

本地 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 对照即可。