断网联调需mock服务监听0.0.0.0而非127.0.0.1,否则WSL/Docker等环境无法访问;Vite代理路径须严格匹配,SDK需绕过navigator.onLine检测,且所有环节必须彻底离线化。

断网时无法联调 Node 服务端接口?不是必须连真实后端,而是要让前端 fetch 能发出去、收回来、不报 CORS、不卡在 SDK 网络探测上。
mock 服务必须监听 0.0.0.0,不能只绑 127.0.0.1
很多本地 mock 工具(比如 json-server)默认只监听 127.0.0.1,这在断网但本机服务运行时看似正常,一旦前端运行在 WSL、Docker 或远程终端里,就根本连不上。VSCode 调试器或前端 dev server 发出的请求会直接超时。
- 启动
json-server时务必加--host 0.0.0.0参数:json-server --watch grok-mock-rules.json --port 8081 --host 0.0.0.0 - Python
http.server方案中,HTTPServer(('0.0.0.0', 8081), handler)才有效;写成('localhost', 8081)或('127.0.0.1', 8081)就只能本机 Chrome 访问,VSCode 的调试进程可能拿不到响应 - 验证方式:在终端执行
curl -v http://localhost:8081/v4/chat/completions和curl -v http://127.0.0.1:8081/v4/chat/completions都通 ≠ 全局可用;真正要测的是curl -v http://$(hostname -I | awk '{print $1}'):8081/v4/chat/completions
Vite/webpack 代理必须指向 mock 地址,且路径前缀要对齐
前端构建工具的代理配置不是“开了就能用”,它只在开发服务器(如 vite dev)启动时生效,且只代理匹配到的路径。如果前端代码里写的 URL 是 /v4/chat/completions,但 vite.config.ts 里 proxy 写的是 /api,那请求根本不会转发,而是直接 404 或跨域失败。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- Vite 中正确写法(注意路径完全匹配):
export default defineConfig({<br> server: {<br> proxy: {<br> '/v4': {<br> target: 'http://localhost:8081',<br> changeOrigin: true,<br> rewrite: (path) => path,<br> },<br> },<br> },<br>}) - 如果 mock 服务跑在 WSL 或另一台机器上,
target必须填真实 IP,比如'http://192.168.1.105:8081',不能写localhost——浏览器和 Node 进程对localhost的解析可能不一致 - 禁用 SDK 自动探测的关键一步:在初始化 Grok SDK 前,手动设置
fetch替换或 patchwindow.fetch,绕过其内部的navigator.onLine检查和 token 校验逻辑,否则即使代理通了,SDK 也会在发起请求前就 throw
VSCode 调试 Node 后端时,断点不触发的真正原因常是 mock 服务没被请求命中
你给 Express 路由打了断点,F5 启动调试,控制台显示 “Listening on port 3000”,但 curl 请求过去断点不动——大概率不是 launch.json 配错了,而是前端压根没把请求发到这个服务上。尤其在断网环境下,前端可能 fallback 到硬编码的线上地址,或者被 Vite 代理规则漏掉了。
- 先确认请求是否真到了你的 Node 服务:在入口文件最顶部加
console.log('REQ IN:', req.method, req.url),看日志有没有输出 - 检查
launch.json中的program是否指向编译后的 JS 文件(如dist/server.js),而不是 TS 源码;TypeScript 项目若没配sourceMaps: true,断点位置会错乱 - 如果用了中间件如
express.json(),确保 mock 请求带了Content-Type: application/json头,否则解析失败,后续路由不会执行,断点自然不触发 - 断网时 DNS 解析失败可能导致某些库(比如 axios 默认配置)卡住几秒再报错,建议在 mock 请求里显式设
timeout: 1000,避免等待干扰判断
离线联调真正的难点不在“怎么起个 mock”,而在于**所有环节都得假设网络不存在**:SDK 不探网、代理不 fallback、前端不读取线上 config、调试器不依赖外部域名解析。任何一个环节偷偷去连外网,整个链路就静默中断——这种问题往往没有报错,只有空白响应或无限 loading。

















