vue中使用mockjs配置和使用方式


Posted in Vue.js onApril 06, 2022

mockjs配置和使用方式

需求

在前后端分离的开发中,需要前后端同时开发,但是在后端完成前,暂时是没有数据返回给前端使用的,如果先写静态后面再改,就有重复工作的内耗存在。

所以我们需要一种简单快速的模拟数据的模块,本文选的是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);
      });
    }
  },

vue中使用mockjs配置和使用方式

5.注在项目接口调试完成后需要删除main.js中对于mock的引用以及mock/index.js这些模拟的资源,从而组件中不用做任何修改,最大减少反复工作量

mock使用及mock无侵入的解决

什么是mock?

vue中使用mockjs配置和使用方式

vue中使用mockjs配置和使用方式

看了官网的介绍,对前端来说“前后端分离”这点,大大提高了前端开发的效率

前端开发在商讨完需求、接口及数据格式后,就可以直接利用mock模拟后台返回的数据来进行代码开发

为什么要用到mock?

下面我在画个流程图,帮助大家理解mock在项目中的处理逻辑

vue中使用mockjs配置和使用方式

由此可以看出,前端可以利用mock服务来模拟请求后台数据,只要接口文档出来,就可以按照接口文档的api和数据格式来自己用mock模拟假数据

如何使用mock?

此处以vue-cli2.x脚手架搭起的项目来介绍其使用

1.安装mockjs npm install --save-dev mockjs或 npm install -D mockjs

2.根目录src中添加mock文件夹,如下图结构,并创建

vue中使用mockjs配置和使用方式

其中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,即可看见

vue中使用mockjs配置和使用方式

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>

vue中使用mockjs配置和使用方式

​ 如上截图,可以看出已经将发送给该url的请求匹配拦截并返回了一个对象,可以定义一个空数组将res.data的数据保存起来,到页面进行渲染

5.如果发送http请求的url与mock中定义的不匹配或不存在的话,就会弹出报错

vue中使用mockjs配置和使用方式

注意:还记得前面说过的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版本为例)

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中打包编译进来
})

vue中使用mockjs配置和使用方式

保存好后,打开终端运行 npm run mock

vue中使用mockjs配置和使用方式

后期如果需要与后台调试接口了,直接运行 npm run dev 即可切换过来,保证了mock在业务代码中抽离出

注意 :在 webpack.mock.config.js 中配置了entry后,是不需要在main.js中再引入Mock的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue中的可拖拽宽度div的实现示例
Apr 08 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue实现Toast组件轻提示
Apr 10 Vue.js
vue实现简易音乐播放器
Aug 14 Vue.js
VUE使用draggable实现组件拖拽
Apr 06 #Vue.js
教你部署vue项目到docker
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 #Vue.js
vue中div禁止点击事件的实现
Apr 02 #Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 #Vue.js
Vue+TypeScript中处理computed方式
Apr 02 #Vue.js
Vue+Flask实现图片传输功能
Apr 01 #Vue.js
You might like
PHP中实现进程间通讯
2006/10/09 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
php中的依赖注入实例详解
2019/08/14 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
路政管理专业个人自荐信范文
2013/11/30 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
促销活动总结怎么写
2014/06/25 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书