首页 > 其他分享 >记录如何在vue中使用mock模拟数据

记录如何在vue中使用mock模拟数据

时间:2023-05-11 10:34:30浏览次数:48  
标签:vue mock js axios 模拟 生成 数据 Mock

1. mock 介绍

mock: 假的。
mock数据 意思是: 真的假数据。【真的即为符合接口规范要求的。 假数据:数据是自己造的,不是真实数据。】

mock实现方式操作流程:
1.本地启mock服务器【用express写接口或本地用专门的mock服务】
2.线上的mock服务器

mock.js基本语法介绍:
mock.js基本语法包含两个部分:数据模板和规则。其中,数据模板用于描述数据的结构和属性,规则用于定义数据模板中各属性生成数据的方式。
Mock.mock() 方法接收一个数据模板对象作为参数,并根据模板生成符合规则的随机数据。
模板对象中以字符串格式表示的属性名后面跟着的是属性值得生成规则。

mock.js常见数据类型的使用方法:
mock.js支持多种数据类型的生成,包括数字,字符串,布尔值,日期等。例如:
Mock.mock('@integer(1, 100)') // 生成指定范围内的整数,1-100之间的整数
Mock.mock('@string(5, 10)') // 生成指定长度的字符串, 生成一个长度5-10之间的字符串
Mock.mock(/[a-z][A-Z]\d/) //生成指定模式的正则表达式, 生成一个包含小写字母,大写字母和数字的正则表达式
Mock.mock('@date(\'yyyy-MM-dd\')') //生成指定格式的日期时间, 生成一个如2023-05-11的日期字符串
Mock.mock('@url(\'http\', \'abc.com\')') //生成指定域名和协议的URL地址, 生成一个以 'http://'为协议, 'abc.com'为域名的URL地址

2.在vue中使用mock步骤

第一步:安装和配置mock.js库,可使用npm进行安装,如:
npm install mockjs
第二步:在vue项目中配置mock.js,如:
先在vue项目中创建一个mock文件夹,并新建index.js文件,如:
// index.js文件
import Mock from 'mockjs'

// 设置拦截ajax请求的相应时间,模拟网络延迟
Mock.setup({
timeout: '200-600'
})
// mock数据示例
Mock.mock('/api/geList',{ //【当请求这个接口时,接口会返回一个长度在10-20之间的数组,数组中每一项都包含id,title等属性】
'list|10-20': [{ // 这个的意思是 返回一个长度在 10-20之间的数组
'id|+1': 1, //
'title': '@ctitle(10,20)', // 使用@ctitle方法生成随机数据
'image': '@image(\'200x100\',\'#50b347\',\'Hello\')', //使用@image方法生成随机数据
'datetime': '@datetime()', // 使用@datetime方法生成随机数据
'author': '@cname()', // 使用@cname方法生成随机数据
'description': '@ctitle(30,100)'
}]
})
export default Mock
第三步:在vue项目入口文件main.js中引入mock/index.js文件,如:
//main.js
import Mock from './mock' // 引入mock数据
第四步:调用接口
// index.vue
<script>
...
mounted(){
// 请求接口,获取mock数据
this.$http.get('/api/getList').then(res=>{
console.log(res.data.list);
})
}
</script>

 3.自定义mock数据模板和规则

// 可通过自定义函数实现特定数据模板的生成,如:
const data = Mock.mock({
'list|10-20': [{
'id|+1': 1,
'name': function(){
// 函数中的this关键字表示当前生成的对象
return this.id % 2 === 0 ? '@cname()' : '@name()'
},
'age': function(){
return this.id % 2 === 0 ? '@integer(18,30)' : '@integer(25,40)'
}
}]
})
注: 上面示例中,定义了两个自定义函数,并将其作为属性值赋给了数据模板对象中的属性。

4.结合axios进行网络请求的mock数据模拟

在实际项目中,通常会使用axios或其他网络请求库来发送ajax请求。Mock.js提供了与axios结合的插件mockjs,可以方便的进行网络请求的mock数据模拟。
使用mockjs插件进行mock数据模拟的实例,如:
import axios from 'axios'
import MockAdapter from 'mockjs'
const mock = new MockAdapter(axios)
//模拟get请求
mock.onGet('/api/getList').reply(200,{
'list|10-20': [{
'id|+1': 1,
'title': '@ctitle(10,20)',
'desc': '@ctitle(30,100)'
}]
})
//模拟post请求
mock.onPost('/api/detail').reply(config=>{
const { title, desc } = JSON.parse(config.data)
return [200, {
code: 0,
msg: '操作成功',
data: {
id: Mock.mock('@id'),
title,
desc
}
}]
})
注: 上面示例中,使用 axios和MockAdapter 创建了一个mock实例,然后使用 onGet, onPost等方法模拟对应的网络请求,同时根据需要返回相应的mock数据。
需要注意的是,在使用mockjs插件进行mock数据模拟时,需要将axios的请求地址指向mock服务器(通常是localhost),以便浏览器中访问到mock数据,如:
axios.get('http://localhost:8080/api/getList').then(res=>{
console.log(res.data.list)
})

 

 

参考链接:

       https://blog.csdn.net/qq_54591762/article/details/128419290    -  mock

       https://juejin.cn/post/7230996352930627639  - mock详解

 

标签:vue,mock,js,axios,模拟,生成,数据,Mock
From: https://www.cnblogs.com/sunnyeve/p/17390096.html

相关文章

  • 关于vue slot 的多级传递使用
    关于vueslot的多级传递使用关于slot以及scope-slot的基本使用,官方文档已经有了详细的介绍:点击这里查看,这里就不复述了。但是在实际的使用过程中,常常会出现外部组件内容需要多级嵌套传递到目标组件,那么slot可以如何实现呢?现在假设有A,B,C三个组件,层级关系为A>B>C(爷爷,父亲,儿子)......
  • 使用vue2+element-ui+vuex实现后台管理系统的头部背景色动态点击修改
    **以下内容仅供自己学习使用话不多说,直接上代码1.首先去vuex里面importVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);conststore=newVuex.Store({state:{headerColor:'default-header',//定义一个默认的颜色},mutations:{ //setHe......
  • vue2 对vxe-table组件二次封装并全局引入
    要求新组件的写法要和旧组件保持一致,那么保留原本的插槽,属性,方法写法如下,以vxe-table为例组件封装<template><vxe-gridref="vxeGrid"v-bind="$attrs"v-on="$listeners"@filter-change="filterChange"><templatev-for="slotinslots......
  • vue数据埋点
    时间比较紧迫,匆忙写下...比如现在记录点击按钮的次数main.js中自定义埋点方法Vue.directive('point',{bind(el,binding){el.addEventListener('click',()=>{console.log(el,binding)//这里写操作埋点的时候需要做的事情,比如调接口})}})......
  • java基于springboot+vue的房屋租赁租房系统、租房管理系统,附源码+数据库,免费包运行,适
    1、项目介绍java基于springboot+vue的房屋租赁租房系统、租房管理系统,分为管理员和用户。用户的功能有:登录、注册、房屋信息、交流论坛、房屋咨询、在线客服、个人中心、我的收藏、我的发布、预约看房管理、在线签约管理、租赁评价管理、管理员的功能有:登录、个人中心、用户管......
  • Vue中的v-model
    Vue中的v-modelVue2v-model只能用于表单类元素上,即类似于输入类元素那样有value值的,比如select框、多选框、单选框、输入框。这就是双向绑定,绑定的就是valueVue3改动比较大,且用的频繁,建议看官方文档相关链接:https://cn.vuejs.org/guide/components/v-model.html......
  • Vue项目中created生命周期重复执行
    路由切换跳转时,发现一个页面的接口和页面展示每次进入都重新请求以及渲染,没有缓存下来,对比了一下的其它页面,并没有这个问题,所以说这个页面是特例,那么就说明这个页面的展示形式上有问题,一开始以为全局组件中用了keep-alive对页面做了缓存以及不缓存的处理,后来发现根本没有。......
  • Vue2没有`public`文件夹,该怎么建资源文件,编译后不被压缩
    在Vue2项目中,如果没有`public`文件夹,可以在项目根目录下创建一个`static`文件夹来存放静态资源文件,如JS、CSS、图片等。 如果你想在打包后不压缩JS文件,并且这个JS文件是在HTML中通过`script`标签引用的,可以按照以下步骤进行操作: 1.在`static`文件夹下创建一个`js`文件夹,并......
  • Vue2项目中,在编译打包后通过读取配置文件,任意修改接口地址
    可以按照以下步骤进行操作: 1.在项目根目录下创建一个名为`config`的文件夹,并在该文件夹下创建一个名为`index.js`的文件,用来存放配置文件,如: ```javascriptmodule.exports={  apiRoot:'http://api.example.com'}``` 这里定义了一个`apiRoot`属性,用来存放接口地......
  • Vue的Router 在首页获取 fullPath 一直都是根路由‘/‘ ?
    在main.j中获取的this.$route.fullpath一直都是'/',因为给路由fullPath赋值是微任务,我们直接获取肯定只能拿到根路由“/”;解决方案:1.给路由fullPath赋值是微任务,那么只需要通过宏任务获取fullPath就可以了,setTimeout(()=>{console.log(this.$route.fullPath)},2000) 2......