当前位置: 首页 > article >正文

Vue3+TS+Vite项目实战:5分钟搞定Mock数据接入(附完整代码)

Vue3TSVite项目实战5分钟实现动态权限Mock系统最近在重构后台管理系统时遇到一个典型痛点前端页面都开发完了后端接口还在设计中。这种前后端进度不匹配的情况相信每个前端开发者都深有体会。今天分享的这套Mock方案不仅能模拟基础数据返回还能完整复现动态路由权限控制的业务场景真正实现前后端分离开发的理想状态。1. 环境搭建与基础配置首先确保项目已经初始化了Vue3TypeScriptVite环境。如果还没创建项目可以通过以下命令快速初始化npm create vitelatest my-vue-app --template vue-ts进入项目目录后安装Mock方案的核心依赖npm install vite-plugin-mock mockjs -D这里我们选择vite-plugin-mock而不是常见的mockjs单独使用是因为它与Vite深度集成支持热更新且配置更简单。同时安装mockjs作为数据生成工具。在项目根目录创建mock文件夹这是存放所有Mock数据的约定目录。新建mock/user.ts文件开始编写我们的第一个Mock接口// mock/user.ts import { MockMethod } from vite-plugin-mock export default [ { url: /api/login, method: post, timeout: 500, response: () { return { code: 200, data: { token: mock-token-123456, username: admin } } } } ] as MockMethod[]注意这里使用了TypeScript的类型断言确保我们的Mock配置符合vite-plugin-mock的类型要求。2. Vite配置与Mock服务启用接下来配置vite.config.ts文件启用Mock服务// vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import { viteMockServe } from vite-plugin-mock export default defineConfig({ plugins: [ vue(), viteMockServe({ mockPath: mock, // Mock文件存放目录 localEnabled: true, // 开发环境启用 prodEnabled: false, // 生产环境禁用 injectCode: import { setupProdMockServer } from ../mock; setupProdMockServer(); // 可选的生产环境Mock方案 }) ] })关键配置参数说明参数名类型默认值说明mockPathstringmockMock文件存放目录localEnabledbooleanfalse开发环境是否启用prodEnabledbooleanfalse生产环境是否启用loggerbooleantrue是否在控制台显示请求日志injectCodestring注入到main.ts的代码配置完成后启动开发服务器Mock服务会自动生效npm run dev3. 实现动态路由权限Mock现在我们来模拟一个完整的动态路由权限控制系统。首先在mock/user.ts中扩展路由数据// mock/user.ts const dynamicRoutes [ { path: /system, component: Layout, meta: { title: 系统管理, icon: setting, roles: [admin] }, children: [ { path: user, component: system/user, meta: { title: 用户管理, roles: [admin] } } ] }, { path: /dashboard, component: Layout, meta: { title: 仪表盘, icon: dashboard, roles: [admin, editor] } } ] export default [ // 登录接口 { url: /api/login, method: post, response: ({ body }) { if (body.username admin) { return { code: 200, data: { token: admin-token, roles: [admin] } } } else { return { code: 200, data: { token: editor-token, roles: [editor] } } } } }, // 路由接口 { url: /api/routes, method: get, response: ({ headers }) { const token headers.authorization if (!token) { return { code: 401, message: 未授权 } } const isAdmin token.includes(admin) return { code: 200, data: dynamicRoutes.filter(route isAdmin || !route.meta?.roles || route.meta.roles.includes(editor) ) } } } ] as MockMethod[]这个Mock实现了几项关键功能根据不同用户返回不同token基于token中的角色信息过滤路由完整的权限控制逻辑4. 前端业务代码集成在前端项目中我们需要创建对应的请求和状态管理。首先封装axios实例// src/utils/request.ts import axios from axios const service axios.create({ baseURL: import.meta.env.VITE_API_URL, timeout: 5000 }) // 请求拦截器 service.interceptors.request.use(config { const token localStorage.getItem(token) if (token) { config.headers.Authorization Bearer ${token} } return config }) // 响应拦截器 service.interceptors.response.use( response { return response.data }, error { return Promise.reject(error) } ) export default service然后实现登录和路由获取的逻辑// src/api/user.ts import request from /utils/request interface LoginData { username: string password: string } interface RouteItem { path: string component: string meta?: { title?: string icon?: string roles?: string[] } } export const login (data: LoginData) { return request({ url: /api/login, method: post, data }) } export const getRoutes () { return requestRouteItem[]({ url: /api/routes, method: get }) }在Pinia/Vuex中管理用户状态和路由// src/store/user.ts import { defineStore } from pinia import { login, getRoutes } from /api/user export const useUserStore defineStore(user, { state: () ({ token: , routes: [] as RouteItem[], roles: [] as string[] }), actions: { async login(loginData: LoginData) { const res await login(loginData) this.token res.data.token this.roles res.data.roles localStorage.setItem(token, res.data.token) }, async fetchRoutes() { const res await getRoutes() this.routes res.data return res.data } } })5. 常见问题与调试技巧在实际开发中可能会遇到以下典型问题问题1Mock接口不生效检查vite.config.ts中的localEnabled是否设置为true确认Mock文件后缀为.ts且位于正确目录查看控制台是否有Mock服务启动日志问题2生产环境意外启用Mock确保prodEnabled设置为false可以通过环境变量动态控制viteMockServe({ localEnabled: import.meta.env.DEV, prodEnabled: false })问题3TypeScript类型报错安装types/mockjs获取类型定义为自定义Mock数据添加类型注解interface MockResponse { code: number data: any message?: string } const response: MockResponse { code: 200, data: { /*...*/ } }调试时可以使用浏览器开发者工具的Network面板查看Mock请求所有Mock请求都会带有[vite-plugin-mock]前缀的标记。6. 高级Mock技巧对于更复杂的场景我们可以实现以下高级功能动态响应数据{ url: /api/user/:id, method: get, response: ({ query }) { return { code: 200, data: { id: query.id, name: 用户${query.id}, age: Math.floor(Math.random() * 30) 20 } } } }延迟响应模拟网络状况{ url: /api/slow, method: get, timeout: 2000, // 2秒延迟 response: () ({ /*...*/ }) }Mock文件分模块管理/mock /system user.ts role.ts /dashboard analysis.ts index.ts // 统一导出在index.ts中聚合所有Mock模块import system from ./system/user import dashboard from ./dashboard/analysis export default [...system, ...dashboard]使用Mock.js生成更真实的数据import Mock from mockjs { url: /api/users, method: get, response: () { return Mock.mock({ list|10: [{ id|1: 1, name: cname, age|20-40: 1, email: email, address: county(true) }] }) } }这套Mock方案已经在我们多个线上项目中得到验证特别是在大型后台管理系统开发中能够显著提升前后端并行开发效率。实际使用中可以根据项目需求灵活调整Mock数据的复杂度和响应逻辑。

相关文章:

Vue3+TS+Vite项目实战:5分钟搞定Mock数据接入(附完整代码)

Vue3TSVite项目实战:5分钟实现动态权限Mock系统 最近在重构后台管理系统时,遇到一个典型痛点:前端页面都开发完了,后端接口还在设计中。这种前后端进度不匹配的情况,相信每个前端开发者都深有体会。今天分享的这套Mock…...

MATLAB图像锐化避坑指南:为什么你的拉普拉斯算子效果总是不对?

MATLAB图像锐化实战:拉普拉斯算子常见误区与专业解决方案 当你在MATLAB中尝试用拉普拉斯算子锐化图像时,是否遇到过这些情况:锐化后图像反而模糊、边缘出现光晕、或者整体对比度异常?这些现象往往源于数据类型处理、核函数选择、叠…...

无线网络实战:从零配置AP与SSID,打通设备互联

1. 无线网络基础概念扫盲 刚接触无线网络时,我经常被各种专业术语搞得晕头转向。其实搭建一个简单的办公网络并不复杂,我们先来理清几个关键概念。**AP(接入点)**就像无线网络中的"信号中转站",负责把有线网…...

3分钟掌握RegRipper:Windows注册表取证分析的终极武器

3分钟掌握RegRipper:Windows注册表取证分析的终极武器 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 你是否曾面对Windows注册表文件感到无从下手?想知道如何快速提取关键数字证据&…...

避开STM32H743的坑:GPIO复用配置常见错误与排查指南(附引脚分配图详解)

避开STM32H743的坑:GPIO复用配置常见错误与排查指南 在STM32H743的开发过程中,GPIO复用配置往往是让开发者又爱又恨的部分。爱它是因为灵活多变的外设复用能力让这颗高性能MCU如虎添翼;恨它则是因为稍有不慎就会陷入各种配置冲突和功能异常的…...

SAP SD实战:用‘品目阶层’给老板打报表,别再手动筛选了(附OVSV配置步骤)

SAP SD实战:用‘品目阶层’高效生成管理层报表的完整指南 每次月底做销售报表时,你是不是还在手动筛选"男装-夏装"这类产品线数据?作为SAP SD顾问,我经历过无数次熬夜整理Excel表格的痛苦。直到真正掌握了品目阶层的报表…...

从理论到实践:手把手教你用MATLAB构建LSSVR代理模型

1. 代理模型与LSSVR基础认知 第一次接触"代理模型"这个概念时,我正被一个汽车悬架优化项目折磨得焦头烂额——每次修改参数都要运行长达6小时的有限元仿真。直到导师扔给我一篇关于LSSVR的论文,才真正体会到什么叫"山重水复疑无路&#x…...

新手福音:在快马平台交互式学习openclaw更新命令语法与参数

作为一名刚接触openclaw的新手,我最初看到那些复杂的命令行参数时简直一头雾水。直到发现了InsCode(快马)平台,它用可视化的方式帮我拆解了openclaw更新命令的每个细节,现在终于能自信地操作了。下面分享我的学习心得: 命令结构拆…...

实战指南:用快马平台生成基于openclaw的mac数据清洗工具

最近在做一个数据清洗的小工具,正好用到了openclaw这个库,发现它在macOS上处理数据特别顺手。今天就把整个实战过程记录下来,顺便分享下我是怎么用InsCode(快马)平台快速生成这个工具的。 项目背景与需求分析 手头有个客户提供的销售数据csv&…...

告别重复造轮子,用快马ai一键生成rabbitmq多模式高效代码模板

最近在项目中频繁使用RabbitMQ处理消息队列,发现手动编写各种模式的代码既耗时又容易出错。特别是当业务需要切换不同消息模式时,往往要重新查阅文档、调试参数。经过一番摸索,我总结出一套高效使用RabbitMQ的方法,并借助InsCode(…...

新手入门:借助快马AI生成lostlife交互示例学习前端开发

作为一个刚接触前端开发的新手,我最近想尝试做一个简单的网页互动项目。在网上看到类似lostlife这样的互动游戏后,特别想了解它们是如何实现基础交互功能的。经过一番摸索,我发现用InsCode(快马)平台可以很轻松地实现这个想法,下面…...

3大核心功能突破JSON可视化难题:vue-json-pretty革新前端数据展示体验

3大核心功能突破JSON可视化难题:vue-json-pretty革新前端数据展示体验 【免费下载链接】vue-json-pretty A JSON tree view component that is easy to use and also supports data selection. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-json-pretty …...

Emgu CV轮廓检测避坑指南:RetrType模式选择与效果对比

Emgu CV轮廓检测避坑指南:RetrType模式选择与效果对比 在计算机视觉项目中,轮廓检测往往是物体识别、形状分析的关键第一步。作为OpenCV的.NET封装,Emgu CV提供了强大的轮廓检测功能,但许多开发者在使用FindContours函数时&#x…...

RVC变声器全场景解决方案:6大核心问题的系统解决策略

RVC变声器全场景解决方案&#xff1a;6大核心问题的系统解决策略 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversi…...

如何用AI润色简历?2026年分步指南与实用技巧

在2026年的求职市场中&#xff0c;简历是连接你与心仪岗位的第一座桥梁。面对日益智能化的招聘系统&#xff08;ATS&#xff09;和快节奏的筛选流程&#xff0c;仅凭一份通用简历已难以脱颖而出。这时&#xff0c;AI润色简历从一种新兴尝试转变为高效、精准的必备策略。本文旨在…...

Qwen3.5-9B教程:Gradio队列机制+并发请求限流配置方法

Qwen3.5-9B教程&#xff1a;Gradio队列机制并发请求限流配置方法 1. 模型概述与环境准备 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。其多模态变体Qwen3.5-9B-VL支持图文输入&#xff0c;并能处理长达128K token…...

告别内置数据库:NocoBase企业级部署为何推荐外接MySQL?实战配置详解

企业级NocoBase部署&#xff1a;为什么外接MySQL是必选项&#xff1f; 当技术团队从原型验证转向生产环境部署时&#xff0c;数据库选型往往成为第一个关键决策点。NocoBase作为企业级无代码平台&#xff0c;虽然内置了开箱即用的SQLite数据库&#xff0c;但在真实业务场景中&a…...

Acetic Acid-PEG-OPSS,分子链两端分别带有吡啶基二硫化物和乙酸基团

一.名称英文名称&#xff1a;AA-PEG-OPSS&#xff0c;Acetic Acid-PEG-OPSS&#xff0c;OPSS-PEG-AA&#xff0c;OPSS-PEG-Acetic Acid中文名称&#xff1a;乙酸聚乙二醇二巯基吡啶&#xff0c;乙酸PEG二巯基吡啶分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0…...

丁二酸酯PEG氨基叔丁氧羰基,NHBoc-PEG-SA,可与胺基、羟基等基团发生缩合反应

一.名称英文名称&#xff1a;SA-PEG-NHBoc&#xff0c;Succinic Acid-PEG-NHBoc&#xff0c;NHBoc-PEG-SA&#xff0c;NHBoc-PEG-Succinic Acid中文名称&#xff1a;丁二酸酯聚乙二醇氨基叔丁氧羰基&#xff0c;丁二酸酯PEG氨基叔丁氧羰基分子量&#xff1a;1k&#xff0c;2k&a…...

OpenClaw新手避坑指南:Phi-3-vision-128k-instruct部署中的5个常见错误

OpenClaw新手避坑指南&#xff1a;Phi-3-vision-128k-instruct部署中的5个常见错误 1. 镜像版本不匹配导致的初始化失败 上周我在本地尝试部署Phi-3-vision-128k-instruct时&#xff0c;遇到了第一个拦路虎——系统提示"CUDA version mismatch"。这个错误看似简单&…...

如何用3步解锁百度网盘SVIP特权:macOS逆向工程的实践指南

如何用3步解锁百度网盘SVIP特权&#xff1a;macOS逆向工程的实践指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾在macOS上使用百度网盘下…...

python的模块和包

模块&#xff1a;1&#xff1a;在python里一个.py文件就是一个模块&#xff08;module)2&#xff1a;模块可以包含&#xff1a;变量&#xff0c;函数&#xff0c;方法等许多内容3&#xff1a;通常把能够实现特定功能的代码&#xff0c;集中放在一个模块里4&#xff1a;模块可以…...

STM32F407硬件COM事件实战:六步换相避坑指南(附CubeMX配置)

STM32F407硬件COM事件六步换相实战&#xff1a;从CubeMX配置到避坑指南 在无刷电机控制领域&#xff0c;六步换相是最基础也最关键的环节之一。传统软件换相方式存在PWM通道更新不同步的痛点&#xff0c;而STM32F407的硬件COM事件功能恰好能完美解决这个问题。本文将带您深入实…...

同学花200降AI我花50就搞定了差在哪

我室友处理论文AI率花了200多块&#xff0c;我同样的工作量只花了52元&#xff0c;最终效果差不多。 她不是被宰了&#xff0c;是走了一些弯路。这篇文章说说差距在哪里&#xff0c;以及怎么在50元左右搞定降AI率。 室友的200元是怎么花出去的 室友的论文约1.5万字&#xff…...

从星链到遥感卫星:工程师视角下的轨道摄动实战避坑指南

低轨星座与遥感卫星的轨道摄动实战&#xff1a;工程师避坑手册 当SpaceX的星链卫星以每分钟一颗的速度被发射入轨&#xff0c;当高分系列遥感卫星的成像精度突破亚米级&#xff0c;轨道摄动这个曾经只存在于教科书中的概念&#xff0c;正在成为每个航天工程师的日常挑战。不同…...

比话降AI和嘎嘎降AI哪个好知网用户怎么选

比话降AI和嘎嘎降AI是2026年降AI率工具里被讨论最多的两款。两款都有真实用户实测数据&#xff0c;都有退款保障&#xff0c;都不是"交学费型"的工具。 但它们不一样&#xff0c;适合不同的人。 这篇文章专门从知网用户的角度来对比&#xff0c;说清楚什么情况选比…...

Zynq Linux FPGA Manager实战:5分钟搞定PL配置(含bit转bin避坑指南)

Zynq Linux FPGA Manager实战&#xff1a;5分钟搞定PL配置&#xff08;含bit转bin避坑指南&#xff09; 第一次在Zynq开发板上尝试配置PL逻辑时&#xff0c;我盯着Vivado生成的.bit文件发愁——官方文档里提到的PCAP、ICAP协议像天书一样&#xff0c;而网上各种教程要么步骤不全…...

【Word排版】制表位实战:从入门到精通

1. 制表位到底是什么&#xff1f;为什么比空格更好用&#xff1f; 第一次用Word排简历时&#xff0c;我盯着参差不齐的工作经历栏发愁——明明按了20次空格键&#xff0c;为什么第二行的日期还是对不齐&#xff1f;直到同事教我按住Tab键&#xff0c;所有内容突然像军训列队般整…...

软考系统分析师必看:数据库设计3大坑点与实战避坑指南(附案例分析)

软考系统分析师数据库设计实战&#xff1a;三大核心陷阱与高阶避坑策略 数据库范式应用的典型误区与修正方案 在航空订票系统的数据库设计中&#xff0c;开发团队曾将机票代理关系模式设计为&#xff08;代理商编号&#xff0c;航班编号&#xff0c;代理商名称&#xff0c;客…...

告别写死地址!CH32V IAP升级实战:用函数传参实现APP跳转地址的动态配置

CH32V IAP升级进阶&#xff1a;动态跳转地址的工程实践与安全设计 在嵌入式开发中&#xff0c;IAP&#xff08;In-Application Programming&#xff09;技术是实现固件远程更新的重要手段。对于CH32V系列RISC-V MCU而言&#xff0c;官方示例中"写死"跳转地址的做法虽…...