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.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
Vue实现图书管理小案例
Dec 03 Vue.js
vue+element_ui上传文件,并传递额外参数操作
Dec 05 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
Vue如何实现组件间通信
May 15 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
Vue操作Storage本地化存储
Apr 29 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
php 过滤器实现代码
2010/08/09 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
python如何保证输入键入数字的方法
2019/08/23 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
法学专业毕业生自荐信范文
2013/12/18 职场文书
高一物理教学反思
2014/01/24 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
企业诚信承诺书
2014/05/23 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android