基于vue3的模拟数据mock.js应用

一、mock.js介绍

Mock.js 是一个用于生成随机数据,拦截 Ajax 请求的 JavaScript 库。它主要用于前后端分离开发时,模拟后端数据接口,使得前端开发者在不需要后端实际编写接口的情况下,也能进行开发、测试。

1、主要功能

生成随机数据:Mock.js 提供了丰富的 API 来生成各种类型的数据,如字符串、数字、图片、日期等,并且支持自定义模板来生成复杂的数据结构。
拦截 Ajax 请求:Mock.js 可以拦截前端发起的 Ajax 请求,并返回预设的模拟数据,这样前端就可以像调用真实接口一样进行开发。
数据模板:Mock.js 允许你定义数据模板,这些模板可以基于 JSON 格式,但增加了占位符和函数来生成随机数据。

2、使用场景

前后端分离开发:在前端工程师等待后端接口开发完成之前,可以使用 Mock.js 来模拟接口数据,保证开发进度不受影响。
测试:在自动化测试或单元测试中,使用 Mock.js 来模拟外部依赖(如数据库、网络请求等),提高测试的可靠性和速度。
原型开发:在快速原型开发阶段,使用 Mock.js 快速生成数据,展示界面效果。

二、安装

npm install mockjs
npm install axios  需要安装

安装成功后,node_modules下会有
在这里插入图片描述

三、简单应用案例

1、创建文件夹及文件

src \ mock \ index.js

2、src \ mock \ index.js 模拟接口

import Mock from 'mockjs';

// 定义模拟数据接口
Mock.mock('/api/user', 'get', {
  code: 200,
  message: 'success',
  data: {
    'id|1-100': 1,
    'name': '@name',
    'age|20-30': 25,
    'gender|1': ['Male', 'Female'],
    'email': '@email',
  }
});

3、main.js 引入 mock

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import VueI18n from './language'

import './mock' // 引入 Mock.js 配置

createApp(App).use(VueI18n).mount('#app')

4、创建组件 src / components/UserInfo.vue

<template>
  <div>
    <h2>User Information</h2>
    <div v-if="user">
      <p>ID: {{ user.id }}</p>
      <p>Name: {{ user.name }}</p>
      <p>Age: {{ user.age }}</p>
      <p>Gender: {{ user.gender }}</p>
      <p>Email: {{ user.email }}</p>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      user: null
    };
  },
  mounted() {
    this.fetchUser();
  },
  methods: {
    async fetchUser() {
      try {
        const response = await axios.get('/api/user');
        this.user = response.data.data;
      } catch (error) {
        console.error('Failed to fetch user data:', error);
      }
    }
  }
};
</script>

5、app.vue 加载组件

<template>
 <UserInfo />
</template>

<script setup>
import HelloWorld from './components/HelloWorld.vue'
import UserInfo from './components/UserInfo.vue';

</script>

控制台:npm run dev 运行
在这里插入图片描述
刷新,数据随机不同

四、数据生成规则

1 数字生成

你可以通过 Mock.js 生成各种范围和步长的数字:

const data = Mock.mock({
  'number|1-100': 1,      // 生成1到100之间的随机整数
  'float|1-100.1-10': 1.1 // 生成1到100之间的随机浮点数,保留1到10位小数
});

console.log(data);

输出示例:

{
  "number": 57,
  "float": 83.231
}

2 字符串生成

mock.js 提供了丰富的字符串生成规则:

const data = Mock.mock({
  'string|1-10': '★',         // 重复生成1到10个'★'字符
  'title': '@title',          // 生成一个随机标题
  'paragraph': '@paragraph',  // 生成一个随机段落
  'sentence': '@sentence'     // 生成一个随机句子
});

console.log(data);

输出示例:

{
  "string": "★★★★",
  "title": "Laboris pariatur in.",
  "paragraph": "Deserunt cillum minim...",
  "sentence": "Id cupidatat ut."
}

3 布尔值生成

你可以生成随机布尔值:

const data = Mock.mock({
  'boolean|1': true,   // 生成一个布尔值(true 或 false)
  'boolean2|1-2': true // 生成布尔值,true 的概率为 1/(1+1)
});

console.log(data);

输出示例:

{
  "boolean": false,
  "boolean2": true
}

4 对象生成

你可以使用 mock.js 生成包含随机属性的对象:

const data = Mock.mock({
  'object|2': {         // 从属性中随机选取2个属性
    'name': '@name',
    'age|20-30': 25,
    'city': '@city',
    'gender': '@boolean'
  }
});

console.log(data);

输出示例:

{
  "object": {
    "name": "John Smith",
    "age": 29
  }
}

5 数组生成

mock.js 提供了生成随机数组的功能:

const data = Mock.mock({
  'list|1-5': [{        // 生成1到5个元素的数组
    'id|+1': 1,         // id 从 1 开始递增
    'name': '@name'
  }]
});

console.log(data);

输出示例:

{
  "list": [
    { "id": 1, "name": "John" },
    { "id": 2, "name": "Alice" }
  ]
}

6 时间生成

mock.js 也支持生成随机日期和时间:

const data = Mock.mock({
  'date': '@date',         // 生成随机日期
  'time': '@time',         // 生成随机时间
  'datetime': '@datetime', // 生成随机日期时间
  'now': '@now'            // 生成当前时间
});

console.log(data);

输出示例:

{
  "date": "2024-08-20",
  "time": "14:22:16",
  "datetime": "2024-08-20 14:22:16",
  "now": "2024-08-20 14:22:16"
}

五. 拦截 AJAX 请求

1 模拟 GET 请求

你可以使用 Mock.mock() 拦截 GET 请求并返回模拟数据:

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

fetch('/api/user')
  .then(response => response.json())
  .then(data => {
    console.log(data);
  });

输出示例:

{
  "id": 1,
  "name": "John Doe",
  "age": 28
}

2 模拟 POST 请求

你也可以模拟 POST 请求:

Mock.mock('/api/user', 'post', (options) => {
  const body = JSON.parse(options.body);
  return {
    id: body.id,
    name: '@name',
    age: '@integer(20,30)'
  };
});

fetch('/api/user', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ id: 1 })
})
  .then(response => response.json())
  .then(data => {
    console.log(data);
  });

输出示例:

{
  "id": 1,
  "name": "Jane Doe",
  "age": 23
}

3 使用正则表达式匹配路由

你可以使用正则表达式来匹配路由,模拟 RESTful 风格的接口:

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

fetch('/api/user/123')
  .then(response => response.json())
  .then(data => {
    console.log(data);
  });

输出示例:

{
  "id": 123,
  "name": "John Smith",
  "age": 25
}

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

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

相关文章

别只知道Xmind了,这4款思维导图工具也都很实用!

作为一款十分知名的思维导图工具&#xff0c;Xmind确实是一款很好用的脑图工具。不仅操作流畅&#xff0c;功能丰富&#xff0c;还有很多素材可以使用。但是没有云同步功能&#xff0c;免费的功能也有限。如果大家想知道更多好用的思维导图工具的话&#xff0c;也可以看看这4个…

企业级web应用服务器tomcat

目录 一、Web技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二、tomcat的功能介绍 2.1 安装 tomcat 环境准备 2.1.1 安装java环境 2.1.2 安装并启动tomcat …

「数组」希尔排序 / 区间增量优化(C++)

目录 概述 思路 核心概念&#xff1a;增量d 算法过程 流程 Code 优化方案 区间增量优化 Code(pro) 复杂度 概述 我们在「数组」冒泡排序|选择排序|插入排序 / 及优化方案&#xff08;C&#xff09;中讲解了插入排序。 它有这么两个特点&#xff1a; ①待排序元素较…

路由偏好详解

路由偏好对网络性能和数据传输效率有着重要影响。本文将从路由偏好的相关概念、影响因素和实际应用&#xff0c;同时结合IP数据云的功能展示其在优化路由选择中的作用。 路由偏好指网络设备在选择路由路径时所倾向的特定策略或条件。它基于多种因素进行决策&#xff0c;例如网络…

CSS继承、盒子模型、float浮动、定位、diaplay

一、CSS继承 1.文字相关的样式会被子元素继承。 2.布局样式相关的不会被子元素继承。&#xff08;用inherit可以强行继承&#xff09; 实现效果&#xff1a; 二、盒子模型 每个标签都有一个盒子模型&#xff0c;有内容区、内边距、边框、外边距。 从内到外&#xff1a;cont…

矩阵中的最大得分(Lc3148)——动态规划

给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&#xff09;。从值为 c1 的单元格移动到值为 c2 的单元格的得分为 c2 - c1 。 你可以从 任一 单元格开始&#xff0c;并且必须…

Maven的简单使用

Maven使用 Maven的作用1. 自动构建标准化的java项目结构(1) 项目结构① 约定目录结构的意义② 约定大于配置 (2)项目创建坐标坐标的命名方法&#xff08;约定&#xff09; 2. 帮助管理java中jar包的依赖(1) 配置使用依赖引入属性配置 (2) maven指令(3) 依赖的范围(4) 依赖传递(…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT&#xff1f; ChatGPT是由 OpenAI 开发的先进人工智能语言模型&#xff0c;能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议&#xff0c;甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本&#xff0c;它们都拥有强大的语言处理能力&…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

算法日记day 44(动归之编辑距离|回文字串|最长回文子序列)

一、编辑距离 题目&#xff1a; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 "…

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件&#xff0c;继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能&#xff0c;主要用于在加载内容时显示进度。它的一些主要特点如下&#xff1a; 自动隐藏和显示&#xff1a;ContentLoadingProgressBar 会在…

初级python代码编程学习----简单的图形化闹钟小程序

我们来创建一个简单的图形化闹钟程序通常需要使用图形用户界面&#xff08;GUI&#xff09;库。以下是使用Python的Tkinter库创建一个基本闹钟程序的步骤&#xff1a; 环境准备 确保已安装Python。安装Tkinter库&#xff08;Python 3.8及以上版本自带Tkinter&#xff0c;无需…

软件测试学习笔记丨Allure2报告添加附件报告定制

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/31810 一、Allure2报告中添加附件-图片 1.1 附件类型 TEXT ("text/plain", "txt") CSV ("text/csv", "csv") TSV ("text/tab-separated-v…

leetcode:2119. 反转两次的数字(python3解法)

难度&#xff1a;简单 反转 一个整数意味着倒置它的所有位。 例如&#xff0c;反转 2021 得到 1202 。反转 12300 得到 321 &#xff0c;不保留前导零 。 给你一个整数 num &#xff0c;反转 num 得到 reversed1 &#xff0c;接着反转 reversed1 得到 reversed2 。如果 reverse…

GEC6818开发板的学习

1、开发板的简介 首先连接 开发板与电脑,需电脑安装串口驱动:例CH340 2、开发板的特性: 像素:800*480Pix分辨率:高,宽两个维度的像素点数目开发板色深为32位一个像素点占4个字节:分别为灰度保留位、RGB三原色各占一位3、为什么要内存映射 虽然LCD设备本质上也可以看作…

OW-VISCap——开放世界视频实例分割方法研究

概述 论文地址&#xff1a;https://arxiv.org/pdf/2404.03657 本文提出了一种名为 OW-VISCap&#xff08;开放世界视频实例分割和字幕&#xff09;的方法。其三大贡献是 开放世界对象查询&#xff1a;除了已知对象查询外&#xff0c;还引入了开放世界对象查询&#xff0c;以发…

【安全靶场】-DC-7

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 一、收集信息 1.查看主机是否存活 nmap -T4 -sP 192.168.216.149 2.主动扫描 看开放了哪些端口和功能 n…

WPF调用CEF插件运行时启动CefSharp.BrowserSubprocess.exe三个进程

cefsharp.browsersubprocess.exe 是CefSharp&#xff08;一个基于Chromium的开源浏览器控件&#xff09;的一部分。这个可执行文件通常在以下情况下启动&#xff1a; 渲染进程&#xff1a;CefSharp使用多进程架构&#xff0c;类似于Chrome浏览器。cefsharp.browsersubprocess.e…

ArcGIS 数据服务在三维 Cesium/SuperMap 项目中使用遇到的一些问题及其解决方法

ArcGIS 数据服务在三维 Cesium/SuperMap 项目中使用遇到的一些问题及其解决方法 一、三维系统支持的 ArcGIS 服务及其投影 1、动态服务 ArcGIS 动态服务的数据&#xff0c;支持任意投影在三维系统中加载。 2、切片服务 ArcGIS 切片服务仅支持 3857(web 墨卡托投影)&#x…

19529 照明灯安装

### 详细分析 这个问题可以通过二分查找和贪心算法来解决。我们需要找到一个最大值&#xff0c;使得在这个最大值下&#xff0c;能够在给定的坐标上安装 k 个照明灯&#xff0c;并且相邻的照明灯之间的距离至少为这个最大值。 ### 思路 1. **排序**&#xff1a;首先对给定的…