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

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
    

    在项目中引入:

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

    import Mock from 'mockjs';
    

二、基本用法

1. 定义模拟数据格式

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

Mock.mock(url, method, data)
  • url:要拦截的请求 URL,支持字符串或正则表达式。
  • method:请求类型,比如 "get""post",不区分大小写。
  • data:要返回的模拟数据格式。
示例:简单数据模拟
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:随机生成一个人名(中文或英文)。

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

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

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

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

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

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

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

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

    'datetime': '@datetime'
    
4. 图片生成

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

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

四、拦截 AJAX 请求示例

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

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 的请求:

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

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


六、延迟响应

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

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

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


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

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

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 数据接口来测试前端页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915448.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍

丹摩DAMODEL&#xff5c;让AI开发更简单&#xff01;算力租赁上丹摩&#xff01; 目录 一、引言 二、丹摩智算平台概述 &#xff08;一&#xff09;平台架构 &#xff08;二&#xff09;平台特点 三、服务器虚拟化基础 &#xff08;一&#xff09;虚拟化的概念 &#xf…

蓝牙5.0模块助力闹钟升级,开启智能生活第一步

随着智能家居产业的快速发展&#xff0c;智能闹钟作为其中一个重要的品类&#xff0c;逐渐从单一的时间提醒功能演变为集音频播放、语音交互、智能控制等多种功能于一体的智能设备。而在这些功能的实现中&#xff0c;蓝牙音频模组扮演着核心角色。 1、蓝牙音频模组的功能概述 …

POI word转pdf乱码问题处理

1.使用poi 转换word文档成pdf 导入依赖 <dependency><groupId>com.aspose</groupId><artifactId>words</artifactId><version>16.8.0</version></dependency>2.代码实现: SneakyThrowspublic void wordToPdf(String docPath,…

有趣的Midjourney作品赏析(附提示词)

中文提示词&#xff1a;国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词&#xff1a;National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词&#xff1a;粘土模型&#xff0c;男性穿着中世纪欧洲蓝色盔甲&#x…

猫头虎分享: 小米大模型升级第二代MiLM2:从一代到二代,能力飞跃提升

小米大模型升级第二代MiLM2&#xff1a;从一代到二代&#xff0c;能力飞跃提升 大家好&#xff0c;我是猫头虎&#xff0c;今天给大家带来一篇关于小米大模型MiLM2的深度解读。作为技术圈的重磅消息&#xff0c;小米的第二代大模型&#xff08;MiLM2&#xff09;在多项领域实现…

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url 第一类情况 在anaconda创建新环境时&#xff0c;使用如下代码 conda create -n charts python3.7 错误原因&#xff1a; 默认镜像源访问速度过慢&#xff0c;会导致超时从而导致更新和下载失败。 解决方…

【机器学习】机器学习中用到的高等数学知识-2.概率论与统计 (Probability and Statistics)

概率分布&#xff1a;理解数据的分布特征&#xff08;如正态分布、伯努利分布、均匀分布等&#xff09;。期望和方差&#xff1a;描述随机变量的中心位置和离散程度。贝叶斯定理&#xff1a;用于推断和分类中的后验概率计算。假设检验&#xff1a;评估模型的性能和数据显著性。…

ESLint 使用教程(四):ESLint 有哪些执行时机?

前言 ESLint 作为一个静态代码分析工具&#xff0c;可以帮助我们发现和修复代码中的问题&#xff0c;保持代码风格的一致性。然而&#xff0c;ESLint的最佳实践不仅仅在于了解其功能&#xff0c;更在于掌握其执行时机。本文将详细介绍ESLint在不同开发阶段的执行时机&#xff…

【设计模式系列】享元模式(十五)

目录 一、什么是享元模式 二、享元模式的角色 三、享元模式的典型应用场景 四、享元模式在ThreadPoolExecutor中的应用 1. 享元对象&#xff08;Flyweight&#xff09;- 工作线程&#xff08;Worker&#xff09; 2. 享元工厂&#xff08;Flyweight Factory&#xff09;- …

#渗透测试#SRC漏洞挖掘#云技术基础02之容器与云

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

【Linux系统编程】第四十六弹---线程同步与生产消费模型深度解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、Linux线程同步 1.1、同步概念与竞态条件 1.2、条件变量 1.2.1、认识条件变量接口 1.2.2、举例子认识条件变量 1.2.3、…

力扣(LeetCode)283. 移动零(Java)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:雾失楼台&#xff0c;月迷津渡&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主…

如何在单片机引脚有限时拓展更多引脚

假设单片机有3个GPIO口可以使用&#xff0c;但是我现在要控制多余3个口的功能怎么办&#xff1f; 这个时候可以用到74LS138&#xff08;3 线&#xff0d;8线译码器&#xff09;&#xff1a; 这个时候我使用三位二进制位可以表示2^3 8个引脚的内容 这种方法经常用于选择数码屏…

go debug日记:protoc -I . helloworld.proto --go_out=plugins=grpc:.错误debug

使用protoc生成go的文件出现bug 运行命令 protoc -I . helloworld.proto --go_outpluginsgrpc:.如图所示 即&#xff0c;没有指定生成的go文件位置&#xff0c;需要在文件中添加 option go_package"path;name";其中 path 表示生成的go文件的存放地址&#xff0c;…

cesium渲染3DTiles模型和glb模型

cesium渲染3DTiles模型和glb模型 相关网站&#xff1a; 1.快速入门&#xff1a;https://cesium.com/learn/cesiumjs-learn/cesiumjs-quickstart/ 2.webpack配置&#xff1a;https://github.com/CesiumGS/cesium-webpack-example#cesium-webpack-example 3.说明文档&#xff…

灰狼优化算法

一、简介 1.1 灰狼优化算法-Grey Wolf Optimizer 通过模拟灰狼群体捕食行为&#xff0c;基于狼群群体协 作的机制来达到优化的目的。&#xff27;&#xff37;&#xff2f;算法具有结构简单、需 要调节的参数少、容易实现等特点&#xff0c;其中存在能够自适应调整 的收敛因子…

新日撸java三百行` 新手小白java学习记录 `Day1

新日撸java三百行新手小白java学习记录 Day1 模拟多线程回调机制 文章目录 新日撸java三百行 新手小白java学习记录 前言一 、模拟异步机制提出问题解决方案 前言 古人称长江为江&#xff0c;黄河为河。长江水清&#xff0c;黄河水浊&#xff0c;长江在流&#xff0c;黄河也在…

【Unity Bug 随记】unity version control 报 xx is not in a workspace.

可能原因是更改了仓库或者项目名称。 解决办法就是重置Unity Version Control&#xff0c;去Hub disconnect 然后重新connect cloud和UVC UVC可能连不上&#xff0c;直接进入项目就行&#xff0c;打开版本管理标签会让你重新连工作区&#xff0c;选择你的仓库和工作区 然后In…

Go语言入门教案

文章目录 一、教学目标二、教学重难点&#xff08;一&#xff09;重点&#xff08;二&#xff09;难点 三、教学方法四、教学过程&#xff08;一&#xff09;Go语言简介&#xff08;二&#xff09;环境搭建1. 下载和安装Go语言开发环境2. 配置Go语言环境变量3. 命令行查看Go语言…