Mock.js生成随机数据,拦截 Ajax 请求

ops/2024/11/18 10:34:45/

Mock.js 是一个用于模拟数据的 JavaScript 库,特别适合用于前端开发过程中生成假数据进行接口测试。它可以拦截 Ajax 请求并生成随机数据,还可以模拟服务器的响应来加速前端开发。

一、安装 Mock.js

可以通过以下几种方式引入 Mock.js

  1. CDN 引入

    <script src="https://cdn.jsdelivr.net/npm/mockjs/dist/mock.js"></script>
    
  2. 使用 npm

    npm install mockjs --save-dev
    

    在项目中引入:

    javascript">const Mock = require('mockjs');
    
  3. ES6 模块(在支持 ES6 模块的项目中):

    javascript">import Mock from 'mockjs';
    

二、基本用法

1. 定义模拟数据格式

Mock.js 提供了一个 Mock.mock 方法,使用 JSON 模板来定义数据结构:

javascript">Mock.mock(url, method, data)
  • url:要拦截的请求 URL,支持字符串或正则表达式。
  • method:请求类型,比如 "get""post",不区分大小写。
  • data:要返回的模拟数据格式。
示例:简单数据模拟
javascript">Mock.mock('/api/user', 'get', {'name': '@name',      // 随机生成名字'age|18-60': 1,       // 随机生成年龄,范围是 18 到 60'gender|1': ['male', 'female'], // 随机选取一个性别
});
  • @name 是 Mock.js 的占位符,会随机生成一个人名。
  • age|18-60 表示生成一个在 18 到 60 之间的随机整数。
  • gender|1 表示从数组中随机选取一个性别值。

/api/user 接口被请求时,Mock.js 会拦截这个请求并返回一个模拟的 JSON 对象,如:

{"name": "John Doe","age": 35,"gender": "male"
}

三、Mock.js 数据模板语法

Mock.js 提供了丰富的数据模板语法来生成各种随机数据。以下是一些常用的占位符和规则:

1. 基础数据类型
  • name:随机生成一个人名(中文或英文)。

    javascript">'name': '@name'
    
  • string|1-10:生成 1 到 10 个字符组成的随机字符串。

    javascript">'string|1-10': '★'
    
  • boolean|1:生成随机布尔值(true 或 false)。

    javascript">'boolean|1': true
    
  • number|+1:生成递增数字,从初始值开始,每次调用增加 1。

    javascript">'id|+1': 1
    
2. 数组和对象
  • array|1-10:生成一个随机长度的数组。

    javascript">'items|1-10': [{'id|+1': 1,'name': '@name'
    }]
    
  • object|2:从对象中随机选取 2 个键值对。

    javascript">'object|2': {"name": "@name","age|20-30": 25,"gender|1": ["male", "female"],"city": "New York"
    }
    
3. 日期和时间
  • date:生成随机日期,格式为 YYYY-MM-DD

    javascript">'date': '@date'
    
  • time:生成随机时间,格式为 HH:mm:ss

    javascript">'time': '@time'
    
  • datetime:生成随机日期和时间,格式为 YYYY-MM-DD HH:mm:ss

    javascript">'datetime': '@datetime'
    
4. 图片生成

Mock.js 还可以生成随机图片 URL,适用于生成假图片。

javascript">Mock.mock('/api/image', 'get', {'image': "@image('200x200', '#4A90E2', 'Hello')"
});
  • @image('200x200', '#4A90E2', 'Hello') 生成一个 200x200 大小的图片,背景颜色为 #4A90E2,文字为 Hello

四、拦截 AJAX 请求示例

以下是结合 axios 请求和 Mock.js 的示例。通过 Mock.js 拦截实际请求,返回模拟的数据:

javascript">import axios from 'axios';
import Mock from 'mockjs';// 定义 Mock 数据
Mock.mock('/api/data', 'get', {'id|+1': 1,'title': '@title','author': '@name','content': '@paragraph','publishDate': '@date'
});// 发起请求,测试 Mock.js 返回的数据
axios.get('/api/data').then(response => {console.log(response.data);}).catch(error => {console.error('Error:', error);});

每次调用时,/api/data 请求都会返回一个 JSON 对象,模拟一篇随机生成的文章信息。


五、正则匹配 URL

Mock.js 支持使用正则表达式匹配 URL,非常适合有动态参数的 API 请求。例如,匹配 /api/user/123 的请求:

javascript">Mock.mock(/\/api\/user\/\d+/, 'get', {'id': '@id','name': '@name','age|20-30': 1
});

此正则表达式 /\/api\/user\/\d+/ 会匹配 /api/user/ 后接任意数字的请求。


六、延迟响应

在真实环境中,网络请求通常会有延迟,可以用 Mock.setup 模拟响应时间:

javascript">Mock.setup({timeout: '300-800' // 300 到 800 毫秒之间的延迟
});

设置后,所有 Mock.js 拦截的请求都会随机延迟 300 至 800 毫秒后返回数据。


七、综合示例:模拟分页数据

以下是一个使用 Mock.js 模拟分页数据的示例:

javascript">Mock.mock(/\/api\/users\?page=\d+&pageSize=\d+/, 'get', (options) => {const url = new URL(`http://localhost${options.url}`);const page = parseInt(url.searchParams.get("page"));const pageSize = parseInt(url.searchParams.get("pageSize"));return Mock.mock({'total': 100,[`users|${pageSize}`]: [{'id|+1': (page - 1) * pageSize + 1,'name': '@name','age|18-60': 1,'gender|1': ['male', 'female']}]});
});
  • 这个 Mock 拦截 /api/users?page=1&pageSize=10 形式的请求,返回 pageSize 条随机用户数据。
  • 每次请求会返回 10 条用户数据和 total 总数值为 100,可以模拟分页查询效果。

总结

  • 定义数据结构:通过 JSON 模板定义结构,并使用占位符生成随机数据。
  • 拦截请求:通过 Mock.mock 拦截指定的 URL 请求。
  • 自定义生成规则:通过 Mock.js 的占位符生成丰富的数据类型,包括字符串、数值、数组、日期、图片等。
  • 模拟延迟:使用 Mock.setup 模拟网络延迟。

这样,就能用 Mock.js 高效创建模拟 API 数据接口来测试前端页面。


http://www.ppmy.cn/ops/134679.html

相关文章

《操作系统 - 清华大学》4 -1:非连续内存分配:分段

文章目录 0. 概述1. 为什么需要非连续内存分配2.分段3. 分段寻址方案4. 硬件方案 0. 概述 首先要考虑的一个问题就是为什么要用非连续内存来管理现在物理内存。当前具有的非连续物理内存的管理方法&#xff0c;主要涉及到的分段和分页这两种方式。以及关于分页中的一种很重要的…

《Django 5 By Example》阅读笔记:p54-p75

《Django 5 By Example》学习第3天&#xff0c;p54-p75总结&#xff0c;总计22页。 一、技术总结 1.分页 (1)分页&#xff1a;Paginator (2)页数不存在处理&#xff1a; EmptyPage, PageNotAnInteger 2.class-based views(类视图) (1)为什么使用类视图&#xff1f; 1)Or…

web安全漏洞之ssrf入门

web安全漏洞之ssrf入门 1.什么是ssrf SSRF(Server Side Request Forgery,服务端请求伪造)是一种通过构造数据进而伪造成服务端发起请求的漏洞。因为请求是由服务器内部发起&#xff0c;所以一般情况下SSRF漏洞的目标往往是无法从外网访问的内系统。 SSRF漏洞形成的原理多是服务…

28.<Spring博客系统④(使用MD5摘要算法对数据库密码进行加密)>

密码算法简介 1.对称加密算法&#xff1a;加密和解密算法一样 2.非对称加密算法&#xff1a;公钥加密、私钥解密 3.摘要算法&#xff1a;不能解密&#xff0c;不可逆 简单介绍了解一下&#xff1a; 一、对称密码算法 是指加密秘钥和解密秘钥相同的密码算法. 常见的对称密码算法…

如何在算家云搭建Peach-9B-8k-Roleplay(文本生成)

一、Peach-9B-8k-Roleplay简介 Peach-9B-8k-Roleplay 是一种聊天大型语言模型&#xff0c;它是通过我们的数据合成方法创建的超过 100K 的对话中微调 01-ai/Yi-1.5-9B 模型而获得的。 也许是 34B 以下参数最好的 LLM。 二、模型搭建流程 1. 创建容器镜像 进入算家云平台的“…

RPC-健康检测机制

什么是健康检测&#xff1f; 在真实环境中服务提供方是以一个集群的方式提供服务&#xff0c;这对于服务调用方来说&#xff0c;就是一个接口会有多个服务提供方同时提供服务&#xff0c;调用方在每次发起请求的时候都可以拿到一个可用的连接。 健康检测&#xff0c;能帮助从连…

大数据CDP集群中ImpalaHive常见使用语法

1. SQL中设置常量 set var:pi_sysdate 20241114; Variable PI_SYSDATE set to 202411142. CDP中impala 创建内外表 #hive3.0 默认不创建事务表的配置参数 set default_transactional_typenone; create external table stg.hd_aml_mac_ip_ext (machinedate string,vc_fundacc…

求矩阵中最小元素及其位置

#include<stdio.h> int main() {int arr[3][3];for(int i0;i<3;i)//录入行{for(int j0;j<3;j)//录入列{scanf("%d",&arr[i][j]);}}int h,l;//定义行 列int minarr[0][0];//将二维数组首个元素定义为最小for(int i0;i<3;i)//遍历二维数组找到最小…