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中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
使用vuex-persistedstate本地存储vuex
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
php a simple smtp class
2007/11/26 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
Python之PyUnit单元测试实例
2014/10/11 Python
Python类定义和类继承详解
2015/05/08 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python自动zip压缩目录的方法
2015/06/28 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
西雅图的买手店:Totokaelo
2019/10/19 全球购物
师范应届生求职信
2013/11/15 职场文书
给排水工程师岗位职责
2013/11/21 职场文书
药剂专业学生求职信范文
2013/12/28 职场文书
小学生作文评语大全
2014/04/21 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
论文诚信承诺书
2014/05/23 职场文书
北京英文导游词
2015/02/12 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
区域销售大会开幕词
2016/03/04 职场文书
python对文档中元素删除,替换操作
2022/04/02 Python