mock.js无法在node.js中运行,因其依赖浏览器window对象劫持xmlhttprequest/fetch,而node无window;它仅适用于前端浏览器环境,离线开发需配合live-server或webpack-dev-server等工具。

能离线,但必须绕开浏览器环境限制——Mock.js 本身不运行在 Node.js 里,直接 require('mockjs') 然后调 Mock.mock() 是没用的,它只拦截浏览器端 XHR/fetch 请求。
为什么 require('mockjs') 在 Node.js 项目里跑不起来
Mock.js 的核心机制是重写 window.XMLHttpRequest 和 window.fetch,而 Node.js 没有 window 对象。你在终端执行 node index.js 时,哪怕装了 mockjs 包,Mock.mock() 调用也不会生效——它根本找不到要劫持的目标。
- 常见错误现象:
ReferenceError: window is not defined或静默失败(数据没被 mock,仍发真实请求) - 不是安装问题,是运行时环境错配:Mock.js 是前端库,不是 Node.js 中间件
- 如果你用的是 Express/Koa 启服务,那应该用
express-mock-server、json-server或手写路由返回假数据,而不是 Mock.js - 真要在 Node 环境模拟接口,得靠 HTTP 层拦截(如
nock拦截测试中的请求),或启动一个本地 mock server
VSCode 里真正能用 Mock.js 的场景只有两个
它只在「前端代码运行于浏览器中」时起作用,所以你得让前端代码走浏览器流程,而不是 Node 直接执行。
诊断并恢复通过 SSH 隧道连接的 OpenClaw 节点。用于解决配对必需错误、隧道冲突、远程端点错误以及 SSH 目标配置错误等问题。
- 用
live-server或 VSCode 的Live Server插件启动静态服务:HTML + JS 文件通过http://127.0.0.1:5500打开,此时window存在,Mock.mock()才能生效 - 用
webpack-dev-server/vite dev启动前端开发服务器:它们注入了 client runtime,支持 HMR 和全局对象,Mock.js 可以正常 patch XHR/fetch - 别在
node index.js或npm start(指纯 Node 后端)里 import Mock.js——它不会拦截axios.get()或fetch(),因为那些调用走的是 Node 的http模块,不是浏览器 API - 如果非要在 Node 端生成随机数据,直接用
mockjs的Mock.mock()函数(不依赖 window),但它只是个数据生成器,和“拦截请求”无关
想在 VSCode 里实现「完全离线开发」,得组合三样东西
单靠 Mock.js 不够,它只解决“前端发请求时返回假数据”,不解决“没网络时如何启动服务”“如何让接口地址不报错”“怎么让前后端联调路径一致”这些事。
- 前端侧:用
Mock.mock()定义规则,配合webpack.config.js或vite.config.ts的server.proxy把/api/xxx映射到本地静态 JSON 或 mock 函数 - 接口层:建一个
mock/目录,放user.js、order.js等文件,每个导出Mock.mock()结果,再用express加载它们作为真实路由(这样后端一上线,只需删掉这层,路径不变) - 环境隔离:在代码里用
process.env.NODE_ENV === 'development'判断是否启用 mock,避免误发到生产 - VSCode 配置重点:确保
launch.json的runtimeExecutable指向浏览器(如"runtimeExecutable": "C:/Program Files/Google/Chrome/Application/chrome.exe"),而不是 node
真正容易被忽略的点是:Mock.js 的 rurl 参数必须和你前端实际发的请求 URL 完全匹配(包括协议、域名、路径、查询参数格式),少一个斜杠或大小写不对,就劫持失败——它不模糊匹配,也不做重定向解析。










