当前位置: 首页 > news >正文

Mock.js 基本语法与应用笔记

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

文章目录

  • Mock.js 基本语法与应用笔记
    • 1. Mock 基本语法
      • 生成指定字符
      • 生成随机字符
      • 生成标题和句子
      • 生成段落
      • 生成数字
      • 生成增量 ID
      • 身份证号、姓名、地址
      • 生成图片
      • 生成时间
      • 指定数组返回的长度和范围
    • 2. Mock 拦截请求
    • 3. Vue 中测试
    • 4. 另一种使用方式
    • 5. vite 项目
    • 🎉 往期精彩回顾

Mock.js 基本语法与应用笔记

Mock.js 是一个基于 JavaScript 的模拟数据生成库,它可以帮助开发者在前端开发过程中模拟后端API,提供测试数据。Mock.js 的主要功能是生成各种类型的模拟数据,包括文本、数字、日期、数组等,同时也支持拦截请求和响应,使得前端可以在不依赖后端API的情况下进行开发和测试。

1. Mock 基本语法

生成指定字符

import Mock from 'mockjs';const data = Mock.mock({str: '🤣'
});console.log(data);

指定字符和具体个数

const data = Mock.mock({'str|3': '🤣'
});

指定字符和区间

const data = Mock.mock({'str|3-5': '🤣'
});

生成随机字符

const data = Mock.mock({// 一串字母str: '@word'// 一个汉字// str: '@cword'
});

指定个数

const data = Mock.mock({// 3 个中文汉字'str|3': '@cword'// str: '@cword(3)'
});

指定区间

const data = Mock.mock({// 3 到 5 个中文字符'str|3-5': '@cword'// str: '@cword(3, 5)'
});

生成标题和句子

const data = Mock.mock({title: '@ctitle',sentence: '@csentence'
});

可以指定标题和句子的汉字长度和范围

// 长度
const data = Mock.mock({title: '@ctitle(3)',sentence: '@csentence(10)'
});
// 范围
const data = Mock.mock({title: '@ctitle(3, 5)',sentence: '@csentence(10, 15)'
});

生成段落

const data = Mock.mock({content: '@cparagraph'
});

指定段落的个数和范围

// 注意这里 3 代表的是 3 个段落,而不是 3 个中文字符
// 1 个句号是 1 段
const data = Mock.mock({content: '@cparagraph(3)'
});

生成数字

生成指定数字

const data = Mock.mock({// number: 20,// 如果是数值型的 value 将失去意义,最终都表示竖线右边的 20,一般写个 1'number|20': 1
});

生成数字区间

const data = Mock.mock({'number|1-10': 1
});

生成增量 ID

for (let i = 0; i < 10; i++) {const data = Mock.mock({// 默认 1,每次增加 1// id: '@increment'// 每次增加 10id: '@increment(10)'});console.log(data);
}

身份证号、姓名、地址

const data = Mock.mock({id: '@id',name: '@cname',address: '@city(true)'
});

生成图片

const data = Mock.mock({// 大小、背景色、前景色、格式、文字// 注意:颜色要是十六进制,不支持关键字,例如 redimage: "@image('200x200', '#f00', '#fff', 'jpg', 'H')"
});

生成时间

const data = Mock.mock({time1: '@date', // 年-月-日time2: '@date("yyyy-MM-dd HH:mm:ss")'
});

指定数组返回的长度和范围

const data = Mock.mock({'list|1-3': [{name: '@cname',address: '@city(true)',id: '@increment(1)'}]
});

2. Mock 拦截请求

POST => /api/users

Mock.mock(/^\/api\/users/, 'post', (options) => {const user = JSON.parse(options.body);user.id = data.list.length ? data.list[data.list.length - 1].id + 1 : 1;data.list.push(user);return {status: 200};
});

DELETE => /api/users/:id

Mock.mock(/^\/api\/user\/.+/, 'delete', (options) => {const id = options.url.split('/').pop();// !注意 id 变成了字符串const idx = data.list.findIndex((item) => item.id === +id);data.list.splice(idx, 1);return {status: 200};
});

PUT => /api/users/:id

Mock.mock(/^\/api\/users\/.+/, 'put', (options) => {const user = JSON.parse(options.body);const idx = data.list.findIndex((item) => item.id === +user.id);data.list[idx] = user;return {status: 200};
});

GET => /api/users

Mock.mock(/^\/api\/user/, 'get', (options) => {const {pagenum,pagesize,query,id} = qs.parse(options.url.split('?')[1]);if (id) {const user = data.list.find((item) => item.id === +id);return {status: 200,user};}// 1 10   0 ~ 10// 2 10   10 ~ 20const start = (pagenum - 1) * pagesize;const end = pagenum * pagesize;const total = data.list.length;const totalPage = Math.ceil(data.list.length / pagesize);let list = [];if (pagenum > totalPage) {list = [];} else {list = data.list.slice(start, end);}return {status: 200,list,total};
});

GET => /api/users/:id

Mock.mock(/^\/api\/users\/.+/, 'get', (options) => {const id = options.url.split('/').pop();const user = data.list.find((item) => item.id === +id);return {status: 200,user};
});

3. Vue 中测试

User.vue

<template><div class="users"><el-card class="box-card"><el-table :data="tableData" style="width: 100%"><el-table-column prop="date" label="日期" width="180" /><el-table-column prop="name" label="姓名" width="130" /><el-table-column prop="address" label="地址" width="180" /><el-table-columnfixed="right"label="操作"width="80"align="right"><template slot-scope="scope"><el-button@click="deleteRow(scope.row)"type="text"size="small">删除</el-button></template></el-table-column></el-table><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="q.pagenum":page-sizes="[5, 10, 15, 20]":page-size="q.pagesize"layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination></el-card></div>
</template><script>
import axios from 'axios';
export default {data() {return {tableData: [],q: {pagenum: 1,pagesize: 5,query: ''},total: 0};},created() {this.getUsers();},methods: {async getUsers() {const {data: { list, total }} = await axios.get('/api/users', {params: this.q});this.tableData = list;this.total = total;},handleSizeChange(pagesize) {this.q.pagesize = pagesize;this.getUsers();},handleCurrentChange(pagenum) {this.q.pagenum = pagenum;this.getUsers();},async deleteRow({ id }) {const { data } = await axios.delete(`/api/user/${id}`)if (data.status === 200) {this.getUsers();this.$message.success('删除成功');}}}
};
</script>
<style>
.box-card {margin: 40px auto 0;width: 630px;
}
.clearfix:before,
.clearfix:after {display: table;content: '';
}
.clearfix:after {clear: both;
}
.el-pagination {margin-top: 15px;
}
</style>

4. 另一种使用方式

vue.config.js

const qs = require('querystring');
const Mock = require('mockjs');
const data = Mock.mock({'list|27': [{id: '@increment(1)',date: '@date(yyyy-MM-dd hh:mm:ss)',name: '@cname',address: '@city(true)'}]
});
module.exports = {devServer: {before(app) {app.get('/api/users', (req, res) => {const { pagenum, pagesize, query } = qs.parse(req.url.split('?')[1]);const start = (pagenum - 1) * pagesize;const end = pagenum * pagesize;const total = data.list.length;const totalPage = Math.ceil(data.list.length / pagesize);let list = [];if (pagenum > totalPage) {list = [];} else {list = data.list.slice(start, end);}res.send({status: 200,list,total});});app.delete('/api/users/:id', (req, res) => {const idx = data.list.findIndex((item) => item.id === +req.params.id);data.list.splice(idx, 1);res.send({status: 200});});}}
};

5. vite 项目

vite.config.js

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { viteMockServe } from "vite-plugin-mock";// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),viteMockServe({mockPath: "mock",localEnabled: true,}),],
});

mock/index.js

import Mock from 'mockjs'
// 内存模拟数据
const arr = []
for (let i = 0; i < 10; i++) {arr.push({id: Mock.mock('@guid'),name: Mock.mock('@cname'),place: Mock.mock('@county(true)'),})
}
export default [{url: '/list',method: 'get',response: () => {return arr}},{url: '/del',method: 'delete',response: ({query}) => {const index = arr.findIndex((item) => item.id === query.id)arr.splice(index, 1)return { success: true }}}
]

如果对你有帮助,点赞、收藏、关注是我更新的动力!👋🌟🚀

🎉 往期精彩回顾

  1. VS Code上搭建Vue开发环境
  • 文章浏览阅读10.1k次,点赞64次,收藏13次。
  1. Color-UI 简介及使用教程
  • 文章浏览阅读5.9k次,点赞13次,收藏2次。
  1. Vue.2&Vue.3项目引入Element-UI教程&踩坑
  • 文章浏览阅读9.2k次,点赞82次,收藏22次。
  1. VS code搭建C/C++运行环境简单易上手
  • 文章浏览阅读2.7k次,点赞8次,收藏5次。
  1. 入门指南:使用uni-app构建跨平台应用
  • 文章浏览阅读1.2k次,点赞29次,收藏9次。

相关文章:

Mock.js 基本语法与应用笔记

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

vue从零到一创建项目?

创建一个Vue项目通常需要经过以下步骤&#xff0c;从零开始构建一个基本的Vue项目&#xff1a; 步骤一&#xff1a;安装Node.js和npm 下载安装Node.js&#xff1a; 在Node.js官网下载适合你操作系统的Node.js安装包&#xff0c;并按照提示进行安装。安装完Node.js后&#xff…...

安装PyTorch详细过程

安装anaconda 登录anaconda的官网下载&#xff0c;anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网 跳转到这个页面如果你的Python版本正好是3.8版&#xff0c;那便可以直接根据系统去选择自己相应的下载版本就可以了。 但是如果你的Python版本号不是当前页面…...

使用Rust开发小型搜索引擎

一、概述 用Rust创建搜索引擎是探索该语言在性能和安全性方面具有优势的绝佳方式。 这个项目将索引和搜索概念转移到Rust的生态系统中&#xff0c;由于Rust独特的语法和范式&#xff0c;这是一个挑战&#xff0c;但也是有益的。 二、构建搜索引擎 步骤1&#xff0c;创建项目…...

2024.3.13

1.顺序表去重 代码&#xff1a; //顺序表去重 void dele(seq_p L) {if(LNULL){printf("入参为空&#xff0c;请检查\n");return;}for(int i0;i<L->len-1;i){for(int ji1;j<L->len;j){if(L->data[i]L->data[j]){dele_data(L,L->data[j]);j--;}…...

schedule() , schedule_work() 以及schedule_timeout_interruptible()区别

schedule() 和 schedule_work() 是 Linux 内核中用于任务调度的两个函数&#xff0c;它们的作用和使用场景有所不同。 schedule() 函数&#xff1a; * 作用&#xff1a;将当前任务放入睡眠状态并调度其他可运行任务的函数。当调用 schedule() 时&#xff0c;当前任务会放弃 CPU…...

AWS入门实践-AWS CLI工具的使用介绍

AWS CLI&#xff08;Amazon Web Services Command Line Interface&#xff09;是一个强大的工具&#xff0c;它允许您直接从命令行与AWS服务进行交互。这不仅可以加快许多任务的处理速度&#xff0c;而且还可以通过脚本自动化。 一、AWS CLI工具的安装 1、Windows 安装下载…...

Xterminal:未来的终端体验

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…...

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…...

Docker Register 搭建私有镜像仓库

1 安装 docker (1)更新软件源 sudo apt update (2)安装 docker 组件 sudo apt install docker.io (3)启动 docker 服务 sudo systemctl start docker (4)设置 docker 服务开机自启动 sudo systemctl enable docker (5)验证 docker 功能 sudo docker contai…...

蓝桥杯真题讲解:三国游戏(贪心)

蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 二、正解代码 //三国游戏&#xff1a;贪心 #include<bits/stdc.h> #define int long lon…...

docker之自己制作jdk镜像

一&#xff0c;下载想要制作的镜像的对应jdk&#xff08;自行下载&#xff09;&#xff0c;本文使用jdk17&#xff08;因为自己的springboot项目时在jdk17下开发的&#xff0c;悲&#xff01;&#xff01;&#xff01;&#xff0c;再加上没有在官网上找到对应镜像&#xff0c;只…...

基于SpringBoot的农产品特色供销系统(蔬菜商城)

基于SpringBoot的农产品特色供销系统&#xff08;蔬菜商城&#xff09; 系统介绍 该系统使用Java、MySQL、Redis、Spring Boot和HTML等技术作为系统的技术支撑&#xff0c;实现了以下功能模块&#xff1a; &#xff08;1&#xff09;后台管理模块&#xff0c;包括权限、日志、…...

【性能】如何计算 Web 页面的 TTI 指标

什么是 TTI 指标 TTI&#xff08;Time To Interactive&#xff09;&#xff0c;即从页面加载开始到页面处于完全可交互状态所花费的时间。页面处于完全可交互状态时&#xff0c;满足以下 3 个条件&#xff1a; 页面已经显示有用内容。页面上的可见元素关联的事件响应函数已经…...

大模型交互-超拟人合成

1、超拟人合成&#xff1a;将文字转化为自然流畅的人声&#xff0c;在实时语音合成的基础上&#xff0c;精准模拟人类的副语言现象&#xff0c;如呼吸、叹气、语速变化等&#xff0c;使得语音不仅流畅自然&#xff0c;更富有情感和生命力。 2、唤醒的持久运行--->合成能力加…...

第十四届蓝桥杯蜗牛

蜗牛 线性dp 目录 蜗牛 线性dp 先求到达竹竿底部的状态转移方程 求蜗牛到达第i根竹竿的传送门入口的最短时间​编辑 题目链接&#xff1a;蓝桥杯2023年第十四届省赛真题-蜗牛 - C语言网 关键在于建立数组将竹竿上的每个状态量表示出来&#xff0c;并分析出状态转移方程 in…...

分布式定时任务调度xxl-job

1. xxl-job基本介绍 1.1 Quartz的体系结构 Quartz中最重要的三个对象:Job&#xff08;作业&#xff09;、Trigger&#xff08;触发器&#xff09;、Scheduler&#xff08;调度器&#xff09;。 xxl-job的调度原理:调度线程在一个while循环中不断地获取一定数量的即将触发的Tr…...

自动化运维利器Ansible基础(环境部署)

Ansible 介绍及安装 1. 介绍 Ansible 是⼀个 IT ⾃动化⼯具。它能配置系统、部署软件、编 排更复杂的 IT 任务&#xff0c;如连续部署或零停机时间滚动更新。 Ansible ⽤ Python 编写&#xff0c;尽管市⾯上已经有很多可供选择的 配置管理解决⽅案&#xff08;例如 Salt、Pupp…...

微服务自动化管理初步认识与使用

目录 一、ETCD 1.1、ETCD简介 对于实施工程师&#xff1a; 1.2、特点 1.3. 使用场景 1.4、 关键字 1.5 工作原理 二、ETCD的安装 2.1、下载路径 2.2、介绍 2.3、具体操作 安装服务端 安装etcd客户端 测试 三、ETCD使用 3.1、前奏具体操作 3.2、 常用操作 一、ET…...

使用Docker管理linux容器

文章目录 一、使用docker管理镜像 二、使用docker管理容器 一、使用docker管理镜像 1、安装操作系统&#xff0c;我安装的是centOS 7 &#xff0c;因为centos7有着非常丰富的软件仓库&#xff0c;方便后续安装与docker相关的软件。 2、初始化设置&#xff0c; 关闭防火墙 关闭…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...