什么是mock?(作用)
=> 是一种模拟后端借口的解决方案。 (可以让前端提前调用接口,完成前端开发)
优点
1、前后端分离:让前端独立于后端进行开发
2、增加单元测试的真实性:可模拟多场景的数据
3、开发无侵入:不需要修改现有的代码,可拦截ajax请求,返回模拟的返回数据
4、用法简单:适用于大多数接口
5、数据类型丰富:支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等
6、方便扩展:支持自定义函数和正则
语法规范(数据模版&数据占位符)
1、数据模版定义规范
=> 数据模版中的每个属性由三部分组成('属性名|生成规则' :属性值)
'name|rule':value
举个🌰——字符串:
// w随机出现1-10次,1-10表示重复次数
var data = Mock.mock ({'username|1-10' : 'w'})
// w出现5次
var data = Mock.mock ({'username|5' : 'w'})
举个🌰——数字:
// 数字中的1-10表示的数字的范围,1为初始默认值
var data = Mock.mock ({'age|1-10' : 1})
2、数据占位符定义规范
=> 占位符只是在属性值字符串中占个位置,并不出现在最终属性值中
@占位符
@占位符(参数[,参数])
举个🌰:
// 随机生成一个id '()'可不写,写了是用来传参
var data = Mock.mock ('@id()')
// 随机生成一个中文名称
var data = Mock.mock ('@cname()')
// 随机生成一个日期
var data = Mock.mock ("@date('yyyy-mm-dd')")
// 随机生成一段描述
var data = Mock.mock ('@paragraph()')
// 随机生成一个邮箱
var data = Mock.mock ('@email()')
基本流程
安装 -> 导入 -> 使用
安装:
cnpm install mockjs -D
(ps: 安装时提醒node版本不够高,需先升级node版本)
// 升级node
sudo npm i -g n
sudo n stable
// 查看node版本
node -v
导入:
var Mock = require('mockjs')
使用:
var data = Mock.mock({...})
在项目中使用的流程
1、定义接口路由在接口中返回mock模拟的数据
(见基本流程)
mock/index.js
// 引入
var Mock = require('mockjs')
// 暴露出去
module.exports = function(app){
if (process.env.MOCK == 'true') {
// 参数1:借口地址;参数2:服务器处理函数(req:请求对象;res:响应对象)
app.use('/api/userinfo', (req, res) => {
// 随机生成一个对象
var data = Mock.mock ({
id: '@id()',
username: '@cname()',
date: '@date(yyyy-mm-dd)',
description: '@paragraph()',
email: '@email()',
'age|1-100': 23
})
// 将模拟的数据转成json格式并返回给浏览器
res.json(data)
// console.log(data, 'data')
})
}
}
2、在vue.config.js中配置devServer,在before属性中引入接口路由参数
module.exports = {
devServer: {
// devServer 在发送请求时,回先走到before指定的函数中进行处理,如果before中没有对应的接口路由,才会请求外网等。
before: require('../mock/index.js')
}
}
3、使用axios调用该接口获取数据
axios.get('/api/userinfo').then(res => {
console.log(res.data, 'res')
})
控制是否使用mock
=> 新建一个env.development文件
MOCK = true
// MOCK = false
(ps: 判断语句见在项目中使用的流程的1)