news 2026/4/16 13:27:46

Vue——Vue3 Mock 数据与联调

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue——Vue3 Mock 数据与联调

背景问题:
开发阶段需要 Mock 数据。

方案思考:
使用 Mock 服务进行前后端并行开发。

具体实现:
使用 MSW (Mock Service Worker) 进行 Mock:

// mock/index.jsimport{setupWorker}from'msw/browser'import{rest}from'msw'import{userHandlers}from'./user'// 创建 Mock workerexportconstworker=setupWorker(...userHandlers)// 启动 Mock 服务exportasyncfunctionstartMockServer(){if(import.meta.env.VITE_APP_MOCK==='true'){awaitworker.start({onUnhandledRequest:'bypass',// 不处理的请求直接转发serviceWorker:{url:'/mockServiceWorker.js'}})console.log('Mock 服务已启动')}}

用户模块 Mock 数据:

// mock/user.jsimport{rest}from'msw'// 模拟用户数据constmockUsers=[{id:1,username:'admin',email:'admin@example.com',status:'1',createTime:'2023-01-01'},{id:2,username:'user1',email:'user1@example.com',status:'1',createTime:'2023-01-02'},{id:3,username:'user2',email:'user2@example.com',status:'0',createTime:'2023-01-03'}]// 用户相关的 Mock 处理器exportconstuserHandlers=[// 获取用户列表rest.get('/api/system/user/list',(req,res,ctx)=>{constpage=parseInt(req.url.searchParams.get('pageNum'))||1constsize=parseInt(req.url.searchParams.get('pageSize'))||10conststart=(page-1)*sizeconstend=start+sizeconstusers=mockUsers.slice(start,end)returnres(ctx.json({code:200,data:{rows:users,total:mockUsers.length}}))}),// 获取用户详情rest.get('/api/system/user/:id',(req,res,ctx)=>{const{id}=req.paramsconstuser=mockUsers.find(u=>u.id===parseInt(id))if(!user){returnres(ctx.status(404),ctx.json({code:404,message:'用户不存在'}))}returnres(ctx.json({code:200,data:user}))}),// 创建用户rest.post('/api/system/user',async(req,res,ctx)=>{constuserData=awaitreq.json()// 模拟创建成功constnewUser={id:mockUsers.length+1,...userData,createTime:newDate().toISOString().split('T')[0]}mockUsers.push(newUser)returnres(ctx.json({code:200,data:newUser,message:'创建成功'}))}),// 更新用户rest.put('/api/system/user',async(req,res,ctx)=>{constuserData=awaitreq.json()constindex=mockUsers.findIndex(u=>u.id===userData.id)if(index===-1){returnres(ctx.status(404),ctx.json({code:404,message:'用户不存在'}))}mockUsers[index]={...mockUsers[index],...userData}returnres(ctx.json({code:200,data:mockUsers[index],message:'更新成功'}))}),// 删除用户rest.delete('/api/system/user/:id',(req,res,ctx)=>{const{id}=req.paramsconstindex=mockUsers.findIndex(u=>u.id===parseInt(id))if(index===-1){returnres(ctx.status(404),ctx.json({code:404,message:'用户不存在'}))}mockUsers.splice(index,1)returnres(ctx.json({code:200,message:'删除成功'}))})]

使用 Vite 插件进行 Mock:

// vite/plugins/mock.jsimport{defineConfig,loadEnv}from'vite'import{viteMockServe}from'vite-plugin-mock'exportfunctionconfigMockPlugin(isBuild){returnviteMockServe({ignore:/^_/,// 忽略以下划线开头的文件mockPath:'mock',// mock文件夹位置localEnabled:!isBuild,// 开发环境启用prodEnabled:false,// 生产环境不启用injectCode:`import { setupProdMockServer } from '../mock/index.js'; setupProdMockServer();`,})}

在 main.js 中集成 Mock:

// main.jsimport{createApp}from'vue'importAppfrom'./App.vue'importpiniafrom'@/stores'importrouterfrom'@/router'asyncfunctionstartApp(){// 开发环境启动 Mock 服务if(import.meta.env.DEV){const{startMockServer}=awaitimport('@/mock')awaitstartMockServer()}constapp=createApp(App)app.use(pinia)app.use(router)app.mount('#app')}startApp()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 22:38:23

从 MySQL 到 PG,你需要跨越的几道语法“鸿沟”

??? 直接把 MySQL 代码粘过去,生产环境竟然原地爆炸了! 别笑,根据 Stack Overflow 2024 年度的开发者调研,PostgreSQL 已经以 49% 的使用率超越 MySQL 登顶全球第一,但据不完全统计,超过 60% 的新玩家在迁移第一天就被报错信息按在地上摩擦。 连 DB-Engines 的资深分…

作者头像 李华
网站建设 2026/4/14 3:59:27

无线网络仿真:6G网络仿真_(6).MAC层仿真

MAC层仿真 1. MAC层概述 1.1 MAC层的基本功能 在无线网络中,介质访问控制(Medium Access Control, MAC)层负责管理无线资源的分配,确保多个设备能够高效、有序地共享同一无线媒介。MAC层的主要功能包括: 帧的封装与解封…

作者头像 李华
网站建设 2026/4/15 16:58:57

交通仿真软件:SUMO_(20).交通仿真优化算法

交通仿真优化算法 在交通仿真软件中,优化算法是提高仿真效果、实现高效交通管理的重要工具。本节将详细介绍如何在SUMO中应用优化算法,包括路径优化、信号控制优化、交通流量优化等方面。我们将结合具体实例,展示如何通过Python接口和SUMO的内…

作者头像 李华
网站建设 2026/4/10 23:27:59

效率翻倍:AI辅助生成开题报告PPT的实操指南

# 我的天!现在做PPT,已经变成“说人话”就能搞定的事了?> 昨天还在为PPT熬夜到三点,今天发现,只要会打字就行。真的,不夸张。我这周亲眼看着隔壁组实习生,用10分钟搞定了一份我当年要做两天的…

作者头像 李华
网站建设 2026/4/11 22:28:26

CrowdStrike以4亿美元收购浏览器安全公司Seraphic

CrowdStrike Holdings Inc. 正在收购Seraphic Security Ltd.,这是一家帮助企业保护员工浏览器免受在线威胁的初创公司。两家公司今天宣布了这项交易,但没有披露财务条款,不过Calcalist网站估计收购金额为4亿美元。Seraphic在加利福尼亚州帕洛…

作者头像 李华
网站建设 2026/4/11 4:35:37

物理AI:下一代科技前沿已悄然来临

ChatGPT在三年多前的发布引发了AI热潮。尽管AI模型持续变得更加强大,但要真正在人们的日常生活中发挥最大帮助作用,它们需要能够处理日常任务。这只有让AI走出笔记本电脑屏幕上的聊天机器人,更直接地融入我们的环境中才能实现。 行业最新热词…

作者头像 李华