公司动态
vue-cms Mock.js 数据模拟实战:require.context 自动注册的优雅方案
vue-cms Mock.js 数据模拟实战require.context 自动注册的优雅方案【免费下载链接】vue-cms基于 Vue 和 ElementUI 构建的一个企业级后台管理系统项目地址: https://gitcode.com/gh_mirrors/vu/vue-cmsvue-cms 是一套基于 Vue 和 ElementUI 构建的企业级后台管理系统内置了登录、权限、表格、图表、富文本等完整业务模块。它最大的亮点之一就是用Mock.js 数据模拟实现了前端零后端也能跑通全流程的开发体验。本文将以 vue-cms 为范例拆解它是如何借助require.context实现 Mock 接口自动注册的帮助新手快速掌握这套优雅的 mock 方案。为什么后台管理系统需要 Mock.js 数据模拟在前后端分离开发中前端往往要等后端接口就绪才能联调白白浪费大量时间。Mock.js 数据模拟可以拦截 Ajax 请求按规则返回随机或固定的模拟数据让前端在接口未就绪时也能独立开发、独立调试。 核心价值写代码不依赖后端 → 开发进度不被阻塞 → 演示项目零成本跑起来vue-cms 对 Mock 的封装堪称教科书级别所有模拟接口集中在 src/mock/ 目录入口文件一行代码即可自动注册全部接口新增接口甚至不需要改动入口。认识 vue-cms 的 Mock 目录结构vue-cms 的 Mock 代码组织非常清晰主要分为三层文件作用src/mock/index.jsMock 入口负责自动注册所有模块src/mock/modules/按业务拆分的接口模块登录、首页、图表、表格等src/mock/index_old.js旧版手动注册方案供对比学习其中modules文件夹下每个文件对应一块业务例如 login.js 管登录、homepage.js 管首页数据、echarts.js 管图表数据。新增接口时只需在对应模块里加一个对象入口无需任何改动这就是自动注册的威力。require.context 自动注册一行代码批量加载 Mock 模块先看核心代码 src/mock/index.jsconst modulesFiles require.context(./modules, true, /\.js$/) const mockList modulesFiles.keys().reduce((modules, modulePath) { const value modulesFiles(modulePath) modules.push(value.default) return modules }, []) mockList.forEach((b) { for (let key in b) { let { state, url, method, result } b[key] if (state) { Mock.mock(RegExp(url ??.*), method, result) } } })这短短十几行代码藏着两个关键设计① require.context 批量加载require.context(./modules, true, /\.js$/)会自动遍历modules目录下的所有.js文件配合reduce把每个模块的default导出收集成数组。以后新增任何 mock 文件都会被自动发现并注册真正做到零配置扩展。② state 开关 正则匹配每个接口对象都带state开关为false时该接口直接跳过注册方便随时下线某个假接口Mock.mock(RegExp(url ??.*), ...)则让带查询参数的请求也能被正确拦截。接口模块的规范写法state / url / method / result为了让自动注册生效vue-cms 规定每个 Mock 模块都必须导出一个默认对象每个接口统一包含四个字段。以登录模块 login.js 为例export default { login: { state: true, url: /login/login, method: post, result: (userInfo) { let { username } JSON.parse(userInfo.body) return responseFormat(userMap[username]) }, }, }state接口开关true才注册url拦截的请求地址method请求方式post / getresult返回值可以是函数也可以直接返回数据。所有接口统一用 index.js 中定义的responseFormat包裹成{ code, message, data }格式让模拟数据与真实后端返回结构完全一致后续切换到真实接口时前端代码一行都不用改。用 Mock.js 占位符生成逼真的随机数据Mock.js 最吸引人的地方是内置了丰富的数据模板占位符vue-cms 在首页数据中大量使用了它们见 homepage.jsMock.mock(natural(0, 9999999)) // 随机整数 Mock.mock(hex) // 随机十六进制颜色 Mock.mock(cname) // 随机中文姓名 Mock.mock(date()) // 随机日期再配合Mock.setup({ timeout: 300-600 })模拟 300~600 毫秒的网络延时让整个系统的交互手感与真实后端几乎无异。用户管理模块 user.js 还预设了 admin / lucy 两个账号及各自权限登录后即可体验不同权限下的菜单差异。在入口文件启用 Mock一行代码搞定Mock 的启用位置在 src/main.js// 引入 mock 数据开发和生产环境都使用 // 如需连接真实后端接口注释掉下面一行即可 require(/mock/index.js)只需这一行引入整个后台管理系统的所有模拟接口便全部生效。当后端接口就绪后注释掉这行并让 axios 请求指向真实服务即可Mock 与业务代码完全解耦。对比手动注册方案优雅之处一眼便知项目还保留了旧版手动注册文件 index_old.js两者对比一目了然// 旧方案每新增一个接口都要手动加一行 Mock.mock(/login/login, post, loginAPI.login) Mock.mock(/user/getInfo, post, userAPI.pullUserInfo) Mock.mock(/homepage/hometotal, post, homepageAPI.getHomeTotal) // ...接口越多这里越长旧方案每加一个接口就要动一次入口文件接口多了之后极易漏注册、难维护。而require.context自动注册方案下接口注册与业务模块同生共死新增业务模块即自动获得全部 mock 接口这就是优雅二字最直观的体现。新手实践建议从现有模块复制改造以modules下的文件为模板替换 url 和 result 即可快速新增接口善用 state 开关接口联调阶段把对应 mock 的state置为false即可无缝切换真实后端保持统一响应格式所有接口都走responseFormat这是前后端联调零成本的基石。总结vue-cms 通过Mock.js 数据模拟 require.context 自动注册的组合拳完美解决了后台管理系统前端开发的等接口难题目录即接口、文件即注册、开关即切换。这套方案代码量极小、扩展性极强无论是学习 Mock.js 用法还是复用到自己的 Vue 项目中都非常值得直接抄作业。想动手实践的话克隆仓库到本地npm install npm run dev启动后即可体验零后端的前后台开发流程。如果你也在用 Vue ElementUI 搭建后台系统不妨把这套自动注册思路收入自己的工具箱。【免费下载链接】vue-cms基于 Vue 和 ElementUI 构建的一个企业级后台管理系统项目地址: https://gitcode.com/gh_mirrors/vu/vue-cms创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考