当前位置:首页 > 技术 > 正文内容

Mock.js 实战指南:前端开发中模拟接口数据的技巧

访客 技术 2026年7月4日 2

在前端开发中,前后端分离是常见工作模式。当后端接口文档已出但服务尚未就绪时,我们需要在本地模拟数据以便调测。传统做法是硬编码 JSON 文件,但这种方式不灵活且需要频繁切换 URL。借助 Mock.js,我们可以拦截 Ajax 请求并动态生成模拟数据,大大提升开发效率。以下将结合 Vue 项目介绍 Mock.js 的常用场景。

基础示例:在 Vue 项目中集成 Mock.js

// 安装依赖
npm install mockjs --save-dev

在项目中创建模拟数据文件,例如 mock.js

import Mock from 'mockjs';

// 使用正则匹配 URL,GET 请求也能正确拦截
Mock.mock(/\/api\/user\/info/, {
  "code": 200,
  "data": {
    "id": 1001,
    "name": "@cname",        // 随机生成中文姓名
    "age|1-60": 20,          // 随机生成 1 到 60 的数字
    "points|100-1000": 500,  // 随机生成 100 到 1000 的整数
    "level|1-5": 3,          // 随机生成 1 到 5 的等级
    "created": "@datetime"   // 随机日期时间
  }
});

main.js 中引入该文件:

import './mock'; // 自动模拟数据

在 Vue 组件中正常发起请求:

fetchUserInfo() {
  axios.get('/api/user/info').then(res => {
    console.log(res.data); // Mock.js 返回的模拟数据
  }).catch(err => {
    console.error(err);
  });
}

请求延迟设置

真实环境中接口响应需要时间,而 Mock.js 默认立即返回数据,可能导致联调时出现差异。建议设置合理延迟:

// 固定延迟 400 毫秒
Mock.setup({ timeout: 400 });

// 随机延迟 200 到 600 毫秒
Mock.setup({ timeout: '200-600' });

数据生成规则详解

Mock.js 提供丰富的占位符和模板语法,用于构造复杂数据。

字符串

通过 |min-max|count 控制重复次数:

{
  "str1|2-5": "hello",   // 重复 hello 2~5 次
  "str2|3": "ab"         // 重复 ab 3 次
}

数字

{
  "num1|+1": 10,           // 每次自增 1,初始为 10
  "num2|10-100": 50,       // 随机 10~100 的整数
  "num3|10-100.2-4": 50    // 整数部分 10~100,小数保留 2~4 位
}

生成结果示例:

{
  "num1": 10,
  "num2": 54,
  "num3": 42.873
}

布尔值

{
  "flag1|1": true,        // true/false 各 50% 概率
  "flag2|1-3": false       // false 概率为 1/(1+3)=25%,true 为 75%
}

对象与数组

{
  "obj1|2": { a: 1, b: 2, c: 3 },          // 随机选取 2 个属性
  "list1|1": [1, 2, 3],                    // 随机选取 1 个元素
  "list2|+1": ['a', 'b', 'c'],             // 按顺序取元素
  "list3|3-5": ['x'],                      // 重复 'x' 3~5 次
  "list4|4": ['y']                         // 重复 'y' 4 次
}

正则表达式

根据正则反向生成匹配字符串:

{
  "regexp1": /[a-z]{3}/,
  "regexp2": /\d{2,4}/
}
// 可能结果: "xyz", "1234"

Mock.Random 占位符生僻

除了直接使用 @ 占位符,也可以通过 Mock.Random 调用。常用方法包括:

  • 基本类型: boolean, integer, float, string
  • 日期: date, datetime, time
  • 图片: image, dataImage
  • 文本: csentence, ctitle, cparagraph
  • 名字: cname, first, last
  • 网络: url, email, ip

一个综合示例:

Mock.mock(/\/api\/order\/list/, {
  "code": "0000",
  "data|5-10": [{
    "id|+1": 1,
    "title": "@csentence(5, 10)",
    "price|10-200": 50,
    "created": "@datetime"
  }]
});

注意事项

  • Mock.js 会全局拦截匹配的 XHR 请求,务必使用正则确保只拦截目标接口。
  • 在生产环境中应移除 Mock.js 引用,可通过环境变量控制。
  • 当需要模拟复杂状态(如分页、报错)时,结合函数和条件判断动态返回数据。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。