mock.js配置步骤是什么,使用mock能解决什么问题
Admin 2022-09-09 群英技术资讯 503 次浏览
在前后端分离的开发中,需要前后端同时开发,但是在后端完成前,暂时是没有数据返回给前端使用的,如果先写静态后面再改,就有重复工作的内耗存在。
所以我们需要一种简单快速的模拟数据的模块,本文选的是mockjs。
1.安装mockjs
npm install mockjs
2.在项目的src文件夹下建mock文件夹,在mock文件夹下建index.js(存放所有的http模拟返回的接口数据);以下我写了两个接口:
import Mock from 'mockjs';
const vehicle = Mock.mock(
'/api/car', 'post', (req, res) => {
return {
code: 200,
data: [{
id: 1,
name: 'BYD',
}, {
id: 1,
name: 'baojun',
}],
message: '查询成功'
}
})
const user = Mock.mock(
'/api/user', 'get', (req, res) => {
return {
code: 200,
data: {
id: 1,
sex: 1,
age: 25,
createTime: '2017-04-01'
},
message: '查询成功'
}
})
export default {
vehicle,
user
}
3.为了方便在所有组件中使用mock模拟数据在项目 的main.js中导入刚编辑的接口数据
import mockdata from "./mock"; //这样的话组件里就可以随意调用接口了
4.在组件中调用虚拟接口
在生命周期钩子函数中调用接口即可:我使用axios ,前提是项目已经安装了axios(先npm install axios,再npm install --save axios vue-axios),一个按钮执行点击事件,下面方法调接口
<button @click="search()">点击查询</button>
methods: {
search() {
this.$http.get("/api/user").then(res => {
console.log(res);
});
this.$http.post("/api/car").then(res => {
console.log(res);
});
}
},
5.注在项目接口调试完成后需要删除main.js中对于mock的引用以及mock/index.js这些模拟的资源,从而组件中不用做任何修改,最大减少反复工作量
看了官网的介绍,对前端来说“前后端分离”这点,大大提高了前端开发的效率
前端开发在商讨完需求、接口及数据格式后,就可以直接利用mock模拟后台返回的数据来进行代码开发
下面我在画个流程图,帮助大家理解mock在项目中的处理逻辑
由此可以看出,前端可以利用mock服务来模拟请求后台数据,只要接口文档出来,就可以按照接口文档的api和数据格式来自己用mock模拟假数据
此处以vue-cli2.x脚手架搭起的项目来介绍其使用
1.安装mockjs npm install --save-dev mockjs或 npm install -D mockjs
2.根目录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;
3.在main.js中引入定义的mock文件夹
import Mock from './mock'
此时打开终端控制面板,运行 npm run dev 后,打开开发者调试工具的console,即可看见
4.接下来,发送的所有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的数据保存起来,到页面进行渲染
5.如果发送http请求的url与mock中定义的不匹配或不存在的话,就会弹出报错
注意:还记得前面说过的mock会拦截所有http请求,包括你要请求的真实API,也会拦截,提示404报错;此时将main.js中的引入的 import Mock from './mock' 注释掉就好了
但是,”懒“这个动力,让我们思考,如何将mock这个东西很听话的被我们”蹂躏“呢?
接着上面留出的问题,我们就要思考,如何将mock在项目代码中分离,既能保证前后端分离开发,又能在不改代码的情况下任意切换环境;
大家应该都清楚用vue-cli搭建好的项目框架中,会有直接配置好的 npm run dev 和 npm run build 环境;
想到这一步,大家应该也就有了思路,那就是再配置一套dev环境,重命名为mock,后期直接通过 npm run mock 和 npm run dev 一条指令随意切换代码运行环境
如何实现呢?且听我细细道来(此处以vue@2.5.2版本为例)
1.用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"
},
2.在根目录下的build文件夹中创建 webpack.mock.conf.js 文件,并将 webpack.dev.conf.js 的文件内容全部复制过来
3.在 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的。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录elementUI 如何处理文件批量上传问题解决elementUI批量上传下载注意事项在el-upload组件关键的钩子,其它省略点击上传,将多个文件和表单数据一起上传elementUI 如何处理文件批量上传问题elementUI的Upload上传组件,通过设置multiple为true,就可以实现多选文件;但是在
怎样用vue实现无规则截图的功能?我们比较常见的截图功能为了应对多种场景,一般都是有规则的截图,但是随着用户的需求增多,有规则的截图功能已经不能很好的满足需求,对此这篇文章我们就来看看无规则的截图功能要怎样做。
这篇文章给大家分享的是有关javascript对象比较的内容,包括引用比较、手动比较、浅层比较和深层比较这四种方式,感兴趣的朋友就继续往下看吧。
这篇文章主要给大家介绍了关于vue动态菜单、动态路由加载以及刷新踩坑的相关资料,踩的这些坑其实是挺常见的,大家可以看看,避免遇到的时候再踩到同样的坑,需要的朋友可以参考下
angular中怎么使用monaco-editor?下面本篇文章记录下最近的一次业务中用到的 monaco-editor 在 angular 中的使用,希望对大家有所帮助!
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008