news 2026/5/6 5:50:11

Vue3——使用Mock.js

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue3——使用Mock.js

Vue3使用Mock.js

    • 1、Mock 介绍
    • 2、Vue 项目中使用 Mock
      • 2.1、安装使用 Mock
      • 2.2、Mock基础用法
      • 2.3、常用占位符
    • 3、Mock案例
      • 3.1、用户登录
      • 3.2、新增用户
      • 3.3、分页数据
    • 4、注意事项
      • 4.1、按功能模块维护 Mock 数据
      • 4.2、区分开发环境和生产环境

1、Mock 介绍

Mock 英文解释:模拟的,也就是模拟的数据。

作为一名前端人员我们通常会遇到这 2 种情况:

  1. 工作中等着和后端人员调试接口,但是后端接口写的太 TMD 慢了,实在等不及了。
  2. 只会写前端,不会写后端。需要后端接口提供测试数据。

那有了 Mock 之后,前端人员就有了测试数据,然后就可以愉快地进行开发和测试了。所以,说白了 Mock 就是一个像后端一样可以提供模拟数据的工具。在没有 Mock 之前,大多数人一般都是这样获取模拟数据的:提供一个 json 文件,里面都是死数据

[{"id":1001,"name":"Tom","age":18},{"id":1002,"name":"李白","age":21},{"id":1003,"name":"杜甫","age":22}]

然后请求本地 json 文件:

<scriptsetup>import{ref,onMounted}from'vue'onMounted(()=>{getUserList()})constuserList=ref([])constgetUserList=async()=>{//直接请求本地JSON文件constresponse=awaitfetch('/src/mock/json/user.json',{headers:{'Cache-Control':'no-cache'}})userList.value=awaitresponse.json()}</script><template><divclass="main-container"><h1>用户列表</h1><el-tableborder:data="userList"style="width:400px"><el-table-columnprop="id"label="id"/><el-table-columnprop="name"label="姓名"/><el-table-columnprop="age"label="年龄"/></el-table></div></template>


这种情况虽然也能模拟后端接口数据,但数据不是动态的。比如无法模拟分页数据等动态接口行为。

所以我们需要在项目中安装 Mock 工具,帮助我们模拟动态接口行为。

2、Vue 项目中使用 Mock

2.1、安装使用 Mock

安装依赖:

npminstallmockjs --save-dev

在项目中新建 mock 文件夹,然后新建 /api/index.js 文件,创建 Mock 服务:

importMockfrom'mockjs'//模拟用户列表的接口Mock.mock('/api/users','get',{'list|10':[{'id|+1':1,'name':'@cname','age|18-60':1}]})

在 main.js 中导入 mock

import'./mock/api/index.js'

在组件中使用 Mock 数据:

<scriptsetup>import{ref,onMounted}from'vue'importaxiosfrom'axios'onMounted(()=>{getUserList()})constuserList=ref([])constgetUserList=async()=>{constres=awaitaxios.get('/api/users')userList.value=res.data.list}</script><template><divclass="main-container"><h1>用户列表</h1><el-tableborder:data="userList"style="width:400px"><el-table-columnprop="id"label="id"/><el-table-columnprop="name"label="姓名"/><el-table-columnprop="age"label="年龄"/></el-table></div></template>

2.2、Mock基础用法

Mock.js 使用特定的语法规则来定义模拟数据的结构,语法格式为:

'name|rule':value
  • name:属性名
  • rule:生成规则(可选)
  • value:属性值

1. 字符串

// 生成 1-5 个随机中文字符'name|1-5':'@cword'// 生成 5 个随机英文字符'code|5':'@word'

2. 数字

// 生成 30-100 之间的整数'age|30-100':1// 生成带小数的浮点数(整数部分30-100,小数部分1-2位)'score|30-100.1-2':1// id 自增(每次+1)'id|+1':100

3. 布尔值

// 50% 概率为 true'isActive|1':true// 1/3 概率为 true,2/3 概率为 false'isAdmin|1-2':true

4. 对象

// 从对象中随机选取 2 个属性'info|2':{name:'@cname',age:'@integer(30,100)',gender:'@pick(["男","女"])'}// 从对象中随机选取 1-3 个属性'contact|1-3':{email:'@email',phone:/1[3-9]\d{9}/,wechat:'@word(4,16)'}

5. 数组

// 从数组中随机选取 1 个元素'fruit|1':['🍎','🍌','🍇','🍊']// 重复数组元素 3-5 次生成新数组'tags|3-5':['前端','JavaScript','Vue','React']// 生成包含 10 个对象的数组'users|10':[{'id|+1':100,'name':'@cname','age':'@integer(18,60)'}]

2.3、常用占位符

Mock.js 提供了丰富的占位符来生成特定格式的数据:

占位符说明示例
@boolean随机布尔值true/false
@integer(min, max)随机整数18, 42
@float(min, max, dmin, dmax)随机浮点数1998.12
@string(length)随机字符串“fgG”
@cword(length)随机中文字符“脚手架”
@ctitle(min, max)随机中文标题“React知否技术”
@cname随机中文姓名“知否君”
@email随机邮箱“zhifou@qq.com”
@region随机地区“西北”
@province随机省份“浙江省”
@city随机城市“杭州市”
@county随机区县“滨江区”
@url随机URL“https://qq.com”
@date(format)随机日期“2025-06-24”
@time(format)随机时间“22:31:23”
@datetime随机日期时间“2025-06-24 22:31:23”
@image(size, bg, fg, text)随机图片URL"https://image.com/300x100"@color随机颜色"#ffffff"

3、Mock案例

3.1、用户登录

//模拟登录接口Mock.mock('/api/login','post',(options)=>{const{username,password}=JSON.parse(options.body)if(username==='root'&&password==='123456'){return{status:200,message:'登录成功',token:'@www.123'}}else{return{status:401,message:'用户名或者密码错误'}}})
//登录constlogin=async()=>{constres=awaitaxios.post('/api/login',{username:'root',password:'123456'})console.log(res.data)}

3.2、新增用户

// 拦截 POST 请求Mock.mock('/api/user/create','post',(options)=>{constbody=JSON.parse(options.body)return{'code':200,'message':'success','data':{'id':'@id','name':body.name,'createTime':'@now'}}})

3.3、分页数据

Mock.mock('/api/items','get',(options)=>{constpageSize=Number(options.query.pageSize)||10;// 每页大小,默认为10constpage=Number(options.query.page)||1;returnMock.mock({'code':200,'message':'success','data':{'total':100,[`list|${pageSize}`]:[{'id|+1':(page-1)*pageSize+1,'name':'@cname','age|18-60':1,'gender|1':['男','女'],'email':'@email','address':'@county(true)','status|1':['正常','禁用'],'createTime':'@datetime'}]}})});

4、注意事项

4.1、按功能模块维护 Mock 数据

为了方便管理和维护,我们可以将不同功能模块的 Mock 数据分别放在不同的文件中。

4.2、区分开发环境和生产环境

我们只在开发环境中使用 Mock 数据,所以可以通过环境变量来控制是否引入 Mock 文件。例如:

if(process.env.NODE_ENV==='development'){import('./mock');}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 5:50:11

企业级二维码批量检测识别系统的完整解决方案

企业级二维码批量检测识别系统的完整解决方案 【免费下载链接】QrScan 离线批量检测图片是否包含二维码以及识别二维码 项目地址: https://gitcode.com/gh_mirrors/qrs/QrScan 在数字化内容管理日益复杂的今天&#xff0c;图片资产中的二维码信息管理成为企业面临的重要…

作者头像 李华
网站建设 2026/5/6 5:48:32

Neovim集成MCP协议:构建AI智能体开发工作流

1. 项目概述&#xff1a;在Neovim中构建你的AI智能体中枢如果你和我一样&#xff0c;每天都在Neovim里敲代码&#xff0c;同时又在频繁地与ChatGPT、Claude等大语言模型&#xff08;LLM&#xff09;对话&#xff0c;那你一定体会过那种割裂感&#xff1a;一边是强大的编辑器&am…

作者头像 李华
网站建设 2026/5/6 5:42:21

别让高功率激光烧坏你的镜头!一文搞懂LIDT(激光损伤阈值)怎么选

激光元件选型实战指南&#xff1a;如何科学评估LIDT参数避免设备损伤 当你在实验室调试一台价值数百万的激光系统时&#xff0c;最令人心惊的瞬间莫过于看到光学镜片上突然出现的那个微小灼烧点——这往往意味着整套系统需要停机检修&#xff0c;更换受损元件&#xff0c;项目进…

作者头像 李华
网站建设 2026/5/6 5:35:28

日期间隔匹配的SAS实例解析

在数据分析和处理的过程中,经常需要对来自不同数据集的数据进行比对和处理。特别是当涉及到日期间隔的匹配时,这种需求尤为常见。本文将通过一个具体的实例,讲解如何使用SAS编程语言来实现日期间隔的匹配,并生成新的数据集。 数据背景 假设我们有两个数据集: DB1 - 包含…

作者头像 李华
网站建设 2026/5/6 5:29:31

ai赋能:用快马平台快速构建win10镜像安全下载与校验工具原型

用AI快速构建Win10镜像下载工具原型 最近在帮朋友重装系统时&#xff0c;发现寻找官方Win10镜像和验证文件完整性是个挺麻烦的事。作为一个开发者&#xff0c;我决定用InsCode(快马)平台快速搭建一个简易的下载管理工具原型&#xff0c;整个过程比想象中顺利很多。 工具功能设…

作者头像 李华