mock.js的使用

news2025/2/28 15:34:50

初始化

//main.js中
import "@/network/fake-message/index.js"   //全局文件中引入虚假数据
//@/network/fake-message/index.js
//创建伪数据
import Mock from 'mockjs'
import { Random } from 'mockjs'

//获取商品列表
Mock.mock(/api\/goodlist/,'get',{
	status:200,
	message:'获取商品列表成功',

"string|1-8":"a"
})
//注意每次修改这部分代码的时候,需要重新运行程序
//network/request/request.js
//axios请求的封装
import axios from "axios"
export function request(config){
	const instance=axios.create({
		baseURL:'http://localhost:8080',
		timeout:100000
	})
return instance(config)
}

数据规范

数据模板定义规范

每个属性由三部分组成:属性名、生成规则、属性值

'name|rule':Value

生成规则的含义需要依赖属性值的类型才能确定

举例

属性值是字符串

  1. ’name|min-max’:string
    通过重复string生成一个字符串,并由重复次数的规则
  2. ‘name|count’:string

数据占位符定义规范

占位符只是在属性值字符串中占个位置,并不会出现在最终的属性值中

@占位符
@占位符(参数 [, 参数])

  • 占位符引用的是Mock.Random中的方法
  • 可以通过 Mock.Random.extend() 来扩展自定义占位符
Random.extend({
    constellation: function(date) {
        var constellations = ['白羊座', '双子座', '巨蟹座', '狮子座', '天秤座', '天蝎座', '射手座', '水瓶座']
        return this.pick(constellations)
    }
})
Random.constellation()
// => "水瓶座"
Mock.mock('@CONSTELLATION')
// => "天蝎座"
Mock.mock({
    constellation: '@CONSTELLATION'
})
// => { constellation: "射手座" }

Mock.mock

Mock.mock( rurl?, rtype?, template|function( options ) ) 用来生成模拟数据
记录数据魔板,当拦截到匹配rurl和rtype的Ajax请求时,将根据数据魔板template或者执行函数生成模拟数据,并作为响应数据的返回

rurl

表示需要拦截的UL,可以是URL字符串或者URL正则//domain/list.json/、‘/domian/list.json’

rtype

表示需要拦截的Ajax请求类型,例如 GET、POST、PUT、DELETE 等。

template

表示数据魔板,可以是对象或者字符串。例如 { ‘data|1-10’:[{}] }、‘@EMAIL’。

function(options)

表示用于生成响应数据的函数

options

指向本次请求的Ajax选项集,含有url、type和body三个属性

常用语法举例

生成字符串

生成指定次数字符串

const data = Mock.mock({
    "string | 3": "aa"  // 生成"aaaaaa"
})

生成指定范围长度字符串

const data = Mock.mock({
    "string | 1-8": "a" // 随机生成1-8个长度的"a"
})

生成文本

生成一个随机字符串

const data = Mock.mock({
    "string": "@cword"  
}) 

在@符号的后面以c开头的一般表示的是中文,如上方的cword就表示一个随机的汉字,如果是word的话就是一个随机的英文单词。

生成指定长度和范围

const data = Mock.mock({
    string: "@cword(1)"
    str : "@cword(10,15)"
})

生成标题和句子

生成标题和句子

const data = Mock.mock({
    title: "@ctitle",
    sentence: "@csentence"
})
Mock.mock(/api\/goodlist/,'get',{
	status:200,
	message:'获取商品列表成功',
data
})

生成指定长度的标题和句子

const data = Mock.mock({
    title: "@ctitle(8)"
    sentence: "@csentence(50)"
})

生成指定范围的标题和句子

const data = Mock.mock({
    title: "@ctitle(5,8)"
    sentence: "@csentence(50,100)"
})

举例-实现基本get、post和根据id发请求

//创建伪数据
import Mock from 'mockjs'
import { Random } from 'mockjs'
//案例test
Random.extend({
	fruit:function(){
		const arr=['榴莲','波罗蜜', '椰子', '苹果', '菠萝', '释迦']
		return this.pick(arr)
	}
})
//获取商品列表

Mock.mock(/api\/goodlist/,'get',{
	status:200,
	message:'获取商品列表成功',
  'data|5-10': [
    {
      id: '@increment(1)',      // 自增的Id值
      // 'id|+1': 0,            // 这也是在模拟一个自增长的 Id 值
      name: '@cword(2, 8)',     // 随机生成中文字符串
      price: '@natural(2, 10)', // 自然数
      count: '@natural(100, 999)',
      img: '@dataImage(78x78)'  // 指定宽高图片
    }
  ]
})

//添加商品
Mock.mock(/api\/addgoods/, 'post', function(option) {
	// 这里的 option 是请求相关的参数
	console.log(option)
	// 如果需要在返回的对象中再使用mock的语法,则需要再使用Mock.mock
	return Mock.mock({
	  status: 200,
	  message: '@cword(2,5)'
	})
  })

  //根据id获取商品信息---常用
  Mock.mock(/api\/getgoods/,'get',function(option){
	console.log(option)
	//通过正则的.exec()函数,从字符串中提取需要的数据
	//const res=/\/api\/getgoods/(/\d+/)/.exec(option.url) //不知道为什么,在使用正则匹配的时候会报错
	//也可以通过字符串的split方法获取id
	const urlId = option.url.split('/')[3]
    return Mock.mock({
	   data:{
		id:urlId,
		name:'@fruit()',
		price:2,
		count:199,
		img:'@dataImage(78x78)'
	},
	status:200,
	message:'获取商品成功!'
})
  })
<template>
  <div class="left-nav">
	<button @click="getGoodsList">获取商品列表</button>
    <button @click="addGoods">添加商品</button>
    <button @click="getGoodsById(9)">根据Id获取商品信息</button>

  </div>
</template>

<script>
import {request} from 'network/request/request.js'
export default {
  data() {
    return {
    
    };
  },
  methods: {
	getGoodsList(){
		request({
			url:'/api/goodlist',
			method:'get'
		}).then(res=>{console.log(res);})
	},
	async addGoods(){
		//添加商品数据,开发中是需要获取用户输入的值进行添加
		const {data:res}=await request({
			url:'/api/addgoods',
			method:'post',
			data:{
				name: '菠萝',
        price: 8,
        count: 550,
        img: ''}
		})
		console.log(res); //添加商品成功的返回值
	},
	async getGoodsById(id){
		const {data:res}=await request({
			url:`/api/getgoods/${id}`,
            method:'get'
		})
		console.log(res)
	}
  },
};
</script>

例子-对新闻列表实现增删改查

加上分页功能以及请求数据的参数不同哈游删除和添加的方式不同
在这里插入图片描述

const {newsList}=Mock.mock({
	"newsList|75":[
		{
			id:"@increment",//随机生成一个递增的id
			title:"@ctitle()",
			content:"@cparagraph(5,10)",
			img_url: "@image('3*3','#FF83FA','#FCFCFC','png','mono')",//随机生成一个图片
			add_time: "@date(yyyy-MM-dd hh:mm:ss)",
		}
	]
})

//从url中获取query参数https://juejin.cn/user/4433690702123534?id=1&name=rocky
var getQuery=(url,name)=>{
	console.log(url,name);
	//判断是否有query参数
	const index=url.indexOf('?')
	if(index!==-1){
		//截取?后面字符串再将其以&分割成数组:['id=1','name=rocky']
		const queryStrArr=url.substr(index+1).split('&')
		for(var i=0;i<queryStrArr.length;i++){
			//再对数组中的每一项以=进行分割成数组:[id,1],[name,rocky]
			const itemArr=queryStrArr[i].split("=")
			if(itemArr[0]==name){
				return itemArr[1]
			}
		}
	}
	return name
}
//获取新闻列表
// 因为具体的url形式类似为/api/get/news?pageinde1&pagesize=10,所以我们这里使用正则去匹配
Mock.mock(/api\/get\/news/,'get',function(options){
	  // 获取分页相关参数pageindex,pagesize
const pageindex=getQuery(options.url,'pageindex')
const pagesize=getQuery(options.url,'pagesize')
console.log(pageindex,pagesize);
//获取数据的起始位置、结束位置和总页数
  // pageindex:1 pagesize:10 返回0-9条数据  2-10(10-19) 3-10(20-29)
const start=(pageindex-1)*pagesize
const end=pagesize*pageindex
const totalPage=Math.ceil(newsList.length/pagesize)
const list=pageindex>totalPage?[]:newsList.slice(start,end)
return{
	status:200,
	message:'获取新闻成功',
	list:list,
	total:totalPage
}
})


//添加新闻数据
Mock.mock(/api\/add\/news/,'post',function(options){
	const body=JSON.parse(options.body)
	console.log(body)
	newsList.push(//网之前的newslist中追加数据
		Mock.mock({
			id:"@increment",
			title:body.title,
			content:body.content,
			img_url: "@image('3*3','#FF83FA','#FCFCFC','png','mono')",
			add_time: "@date(yyyy-MM-dd hh:mm:ss)",
		}))
	return	{
			status:200,
			message:'添加成功',
			list:newsList,
			total:newsList.length
		}
	
})

//删除新闻
Mock.mock(/api\/delete\/news/,'post',function(options){
	const body=JSON.parse(options.body)
	const index=newsList.findIndex(item=>{
		return item.id===body.id
	})
	newsList.splice(index,1)
	return {
		status:200,
		message:"删除成功",
		list:newsList,
		total:newsList.length
	}
})
<template>
 <div>
    <div class="add">
      <input type="text" v-model="title" placeholder="输入标题" />
      <input type="text" v-model="content" placeholder="输入内容" />
      <button @click="add">添加</button>
    </div>
    <div class="news_list">
      <table>
        <tr v-for="item in list" :key="item.id">
          <td><img :src="item.img_url" alt="" /></td>
          <td>{{ item.title }}</td>
          <td>{{ item.content }}</td>
          <td>{{ item.add_time }}</td>
          <td>
             <button class="remove" @click="remove(item.id)">删除</button>
          </td> 
        </tr>
      </table>
    </div>
    <div class="pages">
      <button @click="prevPage">上一页</button>
      <button @click="nextPage">下一页</button>
    </div>
  </div>
</template>

<script>
import {request} from 'network/request/request.js'
export default {
  data() {
    return {
		title: "",
      content: "",
      list: [],
      pageindex: 1,
      content: "",
    };
  },
  created(){
this.getnewsList()
  },
  methods: {
	//添加新闻
	add(){
request({
	url:'/api/add/news',
	method:'post',
	data:{
		title:this.title,
		content:this.content
	}
}).then(res=>{console.log(res);})
	},
	//获取新闻
	getnewsList(){
		request({
			url:"/api/get/news",
			method:'get',
			params:{
				pageindex:this.pageindex,
				pagesize:10//一个页面中显示总的新闻条数
			}
		}).then(res=>{
			console.log(res);
			this.list=res.data.list
		})
	},
	//删除新闻
	remove(id){
request({
	url:"/api/delete/news",
	method:'post',
	data:id
}).then(res=>{
	console.log(res);
})
	},
	prevPage(){
		this.pageindex++
		this.getnewsList()
	},
	nextPage(){
		this.pageindex--
		this.getnewsList()
	}
  }
};
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java+springmvc+mybatis+vue+mysql的高校课程评价系统

项目介绍 在还没有计算机的时代&#xff0c;对于教学评价的各方面的管理都是靠纸、笔为主要的工具进行的。随着科技的发展&#xff0c;大量信息增长&#xff0c;利用传统的方式已经无法快速、准确的跟随学校各项目的管理工作了。当人们意识到对于大量信息管理的重要性的时候&a…

第二十二章 染色法与匈牙利算法

第二十二章 染色法与匈牙利算法一、使用场景——二分图二、染色法1、算法原理2、代码模板&#xff08;1&#xff09;问题&#xff1a;&#xff08;2&#xff09;代码&#xff1a;&#xff08;3&#xff09;分析&#xff1a;三、匈牙利算法1、算法用途2、算法思路3、算法模板&am…

五个月学完软件测试,现在分享以前自学的测试笔记

以前学习手抄的linux命令哈哈哈 定义 在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。 测试就是发现错误而执行程序的过程。 原则 保证测试的覆盖度&#xff0c;但是穷举测试是不可能…

LVI-SAM坐标系外参分析与代码修改,以适配各种数据集

文章目录0.前言1.原作者传感器件坐标系定义与外参修改1.1.博客作者的讲解&#xff08;仅供参考&#xff09;1.2.LIO-SAM的README中作者对其传感器配置的解释1.3.IMU坐标系详解1.4.params_lidar.yaml中LIO外参修改1.4.1.作者给的参数注释问题1.4.2.自己修改代码2.LVI-SAM中的坐标…

Redis常见面试题(一)

目录 1、Redis是什么? 2、Redis有哪些应用场景? 3、Redis有什么优势? 4、Redis为什么这么快? 5、Redis主要消耗什么物理资源? 6、Redis为什么把所有数据放到内存中? 7、Redis命令是原子性的吗? 8、Redis磁盘快照操作是原子的吗? 9、Redis怎么测试连通性? 10、…

【图像去噪】均值+中值+空间+高斯滤波图像去噪【含GUI Matlab源码 763期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素&#xff0c;图像去噪是指减少图像中噪声的过程。噪声分类有三种&#xff1a;加性噪声&#xff0c;乘性噪声和量化噪声。我们用f(x,y&#xff09;表示图像&#xff0c;g(x,y&#xff0…

四十六——

四十六、JavaScript——对象 一、对象 数据类型&#xff1a;原始值&#xff1a; 1. 数值 Number 2. 大整数 BigInt 3. 字符串 String 4. 布尔值 Boolean 5. 空值 Null 6. 未定义 Undefinded 7. 符号 Symbol 除了七种原始值之外&#xff0c;后面所用到的数据类型&#xff0c;都…

jsp+ssm计算机毕业设计茶园文化交流平台论文【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

jsp+ssm计算机毕业设计超市收银系统论文【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

【LeetCode101. 对称二叉树】—— 二叉树遍历

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; …

【探索Spring底层】12.谈谈代理创建器与代理创建时机

文章目录1. 前言2. 谈谈代理创建器3. 代理创建时机是什么时候4. 浅谈Order的失效场景4. 浅谈Order的失效场景5. 高级切面如何转为低级切面1. 前言 Spring中有两种切面&#xff0c;一种是Aspect&#xff0c;另一种是Advisor 其中Aspect是高级切面&#xff0c;Advisor是低级切面…

【网站架构】网站系统怎么才是安全的?安全验收?等保、网络安全、SQL盲注、https、鉴权

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们讨论网站系统的安全性。 安全的重要性不言而喻&#xff0c;大部分安全问题确实是安全扫描后根据指引修改就可以了。 但是仍有一些问题修改起来是特别麻烦的&#xff0c;这些问题会严重影响上线时间。 本期我们的重点不…

共享购模式简单又好玩,撑起市场的半边天,推动实体产业改造上级

在2022年1月18日&#xff0c;国家发展改革委等七部局下发《促进消费实施方案》的通知&#xff0c;确立了”消费送积分”的新形式。该政策的出台&#xff0c;表明了政府探索实施全国绿色消费积分制度&#xff0c;鼓励地方结合实际建立本地绿色消费积分制度&#xff0c;以兑换商品…

S3 Drive支持以及FIPS 140-2兼容性

S3 Drive支持以及FIPS 140-2兼容性 在Windows Arm64上运行-添加了在Microsoft Windows for Arm64上的功能。无需额外下载&#xff0c;安装程序将为您的系统选择正确的驱动程序和库。 现在符合FIPS 140-2。 现在&#xff0c;您可以使用新的CacheOnlyFiles设置阻止上载临时(或其他…

基于高分辨率时频分析的单通道地震数据自动噪声衰减方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 记录的地震信号常常被噪声破坏。本文使用了一种基于高分辨率时频分析的单通道地震数据自动噪声衰减方法。同步压缩是一种时频重…

MySQL——保证主从一致

binlog 可以用来归档&#xff0c;也可以用来做主备同步&#xff0c;备库执行了 binlog 就可以跟主库保持一致。 MySQL 主备的基本原理 如图 1 所示就是基本的主备切换流程。 在状态 1 中&#xff0c;客户端的读写都直接访问节点 A&#xff0c;而节点 B 是 A 的备库&#xff…

Java安全--CC4

CC4 环境提一小嘴&#xff1a; CC4利用的是commons-collections4&#xff0c;所以我们需要导入新的依赖&#xff0c;地址&#xff1a;https://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.0 我们先来关注一下利用链&#xff1a; 后半段是一样的&am…

本地运行好好的 Java 程序, 一发布到线上就报错的灵异事件终于让我碰到了

说明 本文涉及的相关软件版本如下&#xff1a; mybatis 3.4.xHotSpot JDK1.8Windows 11IDEA 2022.3 先看一段 mybatis 相关的代码 今天一个朋友丢给我如下一段代码&#xff1a; 然后跟我讲为什么本地是好好的&#xff0c; 发布到线上执行就报错。 BlogMapper.java public…

【python机器学习】K-Means算法详解及给坐标点聚类实战(附源码和数据集 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 人们在面对大量未知事物时&#xff0c;往往会采取分而治之的策略&#xff0c;即先将事物按照相似性分成多个组&#xff0c;然后按组对事物进行处理。机器学习里的聚类就是用来完成对事物进行分组的任务 一、样本处理 聚类…

技术原理|Hologres Binlog技术原理揭秘

作者&#xff1a;张高迪&#xff08;花名杳天&#xff09;&#xff0c;Hologres研发。 同传统MySQL数据库&#xff0c;Hologres支持Hologres binlog&#xff0c;记录数据库中所有数据的变化事件日志。通过Hologres binlog&#xff0c;可以非常方便灵活的实现数据之间的复制、同…