vue中mock的使用及mock无侵入解决方案
一、什么是mock?看了官网的介绍,对前端来说“前后端分离”这点,大大提高了前端开发的效率前端开发在商讨完需求、接口及数据格式后,就可以直接利用mock模拟后台返回的数据来进行代码开发二、为什么要用到mock?下面我在画个流程图,帮助大家理解mock在项目中的处理逻辑由此可以看出,前端可以利用mock服务来模拟请求后台数据,只要接口文档出来,就可以按照接口文档的api和数据...
一、什么是mock?
看了官网的介绍,对前端来说“前后端分离”这点,大大提高了前端开发的效率
前端开发在商讨完需求、接口及数据格式后,就可以直接利用mock模拟后台返回的数据来进行代码开发
二、为什么要用到mock?
下面我在画个流程图,帮助大家理解mock在项目中的处理逻辑
-
由此可以看出,前端可以利用mock服务来模拟请求后台数据,只要接口文档出来,就可以按照接口文档的api和数据格式来自己用mock模拟假数据
三、如何使用mock?
此处以vue-cli2.x脚手架搭起的项目来介绍其使用
-
安装mockjs
npm install --save-dev mockjs
或npm install -D mockjs
-
根目录src中添加mock文件夹,如下图结构,并创建
-
其中index.js内容为:
import Mock from 'mockjs'
import { Service } from './data/service'
Mock.mock(/\/Service\/ServiceList/, 'get', Service )
console.log('%c前端 mock 环境启动成功', 'color: #38f;font-weight: bold')
export default Mock
data文件夹中的service.js 为mock模拟返回的数据,其内容为:
import Mock from 'mockjs';
const Service = [];
for (let i = 0; i < 5; i++) {
Service.push(Mock.mock({
id: Mock.Random.guid(),
serviceName: `${Mock.Random.protocol()} --${Mock.Random.id()}`,
'port|8000-9000': 1,
ip: Mock.Random.ip(),
status: Mock.Random.pick(['passing', 'Critical', 'critical','null']),
'node|0-2': 1
}));
}
export default Service;
- 在main.js中引入定义的mock文件夹
import Mock from './mock'
此时打开终端控制面板,运行 npm run dev
后,打开开发者调试工具的console,即可看见
-
接下来,发送的所有http请求均会被mock拦截,如果匹配到与mock中设置的url路径一致
/Service/ServiceList
就会将service.js的模拟出的数据返回,如下(.vue的文件中)<script> import axios from "axios"; export default { data() { return { }; }, methods: { getServer() { axios .get('/Service/ServiceList') .then((res) => { console.log(res); }) .catch((error) => { console.log(error); }); } }, }; </script>
如上截图,可以看出已经将发送给该url的请求匹配拦截并返回了一个对象,可以定义一个空数组将
res.data
的数据保存起来,到页面进行渲染 -
如果发送http请求的url与mock中定义的不匹配或不存在的话,就会弹出报错
注意:还记得前面说过的mock会拦截所有http请求,包括你要请求的真实API,也会拦截,提示404报错;此时将main.js中的引入的
import Mock from './mock'
注释掉就好了但是,”懒“这个动力,让我们思考,如何将mock这个东西很听话的被我们”蹂躏“呢?
四、mock无侵入式配置
接着上面留出的问题,我们就要思考,如何将mock在项目代码中分离,既能保证前后端分离开发,又能在不改代码的情况下任意切换环境;
大家应该都清楚用vue-cli搭建好的项目框架中,会有直接配置好的
npm run dev
和npm run build
环境; 想到这一步,大家应该也就有了思路,那就是再配置一套dev环境,重命名为mock,后期直接通过
npm run mock
和npm run dev
一条指令随意切换代码运行环境 如何实现呢?且听我细细道来(此处以vue@2.5.2版本为例)
-
用vue-cli搭建好的项目框架,打开
package.json
文件,添加运行脚本"mock": "webpack-dev-server --inline --progress --config build/webpack.mock.conf.js",
,如下:"scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "mock": "webpack-dev-server --inline --progress --config build/webpack.mock.conf.js", //---此条脚本就是需要配置的参数,注意json文件中不能写注释,切勿复制此句话 "start": "npm run dev", "lint": "eslint --ext .js,.vue src", "build": "node build/build.js" },
-
在根目录下的build文件夹中创建
webpack.mock.conf.js
文件,并将webpack.dev.conf.js
的文件内容全部复制过来 -
在
webpack.mock.conf.js
中添加配置,如下let entry = baseWebpackConfig.entry Object.keys(entry).forEach(function (name) { entry[name] = ['./src/mock'].concat(entry[name]) //---在运行npm run mock时将mock这个文件在entry中打包编译进来 })
-
保存好后,打开终端运行
npm run mock
后期如果需要与后台调试接口了,直接运行
npm run dev
即可切换过来,保证了mock在业务代码中抽离出注意 :在
webpack.mock.config.js
中配置了entry后,是不需要在main.js中再引入Mock的。
更多推荐
所有评论(0)