一、什么是mock

在这里插入图片描述

在这里插入图片描述

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

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

二、为什么要用到mock?

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

在这里插入图片描述

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

    三、如何使用mock?

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

    1. 安装mockjs npm install --save-dev mockjsnpm 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;
  1. 在main.js中引入定义的mock文件夹
     import Mock from './mock'

此时打开终端控制面板,运行 npm run dev 后,打开开发者调试工具的console,即可看见

在这里插入图片描述

  1. 接下来,发送的所有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的数据保存起来,到页面进行渲染

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

    在这里插入图片描述

    注意:还记得前面说过的mock会拦截所有http请求,包括你要请求的真实API,也会拦截,提示404报错;此时将main.js中的引入的 import Mock from './mock' 注释掉就好了

    但是,”懒“这个动力,让我们思考,如何将mock这个东西很听话的被我们”蹂躏“呢?

四、mock无侵入式配置

​ 接着上面留出的问题,我们就要思考,如何将mock在项目代码中分离,既能保证前后端分离开发,又能在不改代码的情况下任意切换环境;

​ 大家应该都清楚用vue-cli搭建好的项目框架中,会有直接配置好的 npm run devnpm run build 环境;

​ 想到这一步,大家应该也就有了思路,那就是再配置一套dev环境,重命名为mock,后期直接通过 npm run mocknpm 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中打包编译进来
    })
    

    在这里插入图片描述

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

    在这里插入图片描述

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

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

个人博客www.blog.lilihaoo.top

Logo

前往低代码交流专区

更多推荐