使用mockjs模拟后台接口返回的数据(二)

先后端联调通常的逻辑是,前端经过ajax访问后端,后端经过json数据返回给前端。javascript

使用mockjs就是经过mock模拟服务器响应,要在项目当中拦截请求而且用mockjs返回数据。html

通常是经过webpack下devServer的before属性作拦截。前端

①vuecli脚手架根目录新建vue.config.js,键入以下代码:vue

module.exports = {
  devServer: {
    before: require('./mock/index.js') //引入mock的index.js 
  }
}

②根目录mock文件夹下新建index.js,键入以下代码:java

/*
 * @Descriptions: 
 * @Version: 
 * @Author: 
 * @Date: 2020-06-18 23:20:14
 * @LastEditors: dongwenjie
 * @LastEditTime: 2020-06-18 23:27:11
 */
const fs = require('fs');
const path = require('path');
const Mock = require('mockjs');
const JSON5 = require('json5');
// 读取json文件
function getJsonFile(filePath) {
  // 读取指定json文件
  var json = fs.readFileSync(path.resolve(__dirname, filePath), 'utf-8');
  // 解析并返回
  return JSON5.parse(json);
}
// 返回一个函数
module.exports = function (app) {
  // 监听http请求
  app.get('user/userinfo', (rep, res) => {
    // 每次响应请求时读取mock data的json文件
    // getJsonFile方法定义了如何读取json文件并解析成数据对象
    var json = getJsonFile('./userInfo.json5');
    // 将json传入 Mock.mock方法,生成的数据返回给浏览器
    res.json(Mock.mock(json));
  })
}

③在app.vue里面利用axios在mounted生命周期函数中请求接口(注:通常axios都要在项目中进行二次封装,添加一些拦截器或者请求头,状态码判断等操做,这里简单的使用下webpack

<!--
 * @Descriptions: 
 * @Version: 
 * @Author: 
 * @Date: 2020-06-15 22:46:44
 * @LastEditors: dongwenjie
 * @LastEditTime: 2020-06-18 23:35:34
--> 
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png" />
    <HelloWorld msg="Welcome to Your Vue.js App" />
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";
import axios from "axios";
export default {
  name: "App",
  components: {
    HelloWorld
  },
  created() {
    axios
      .get("/user/userinfo")
      .then(res => {
        console.log(res);
      })
      .catch(err => {
        console.log(err);
      });
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

④重启本地服务能够看到 接口请求成功,数据也有返回ios

⑤当后台接口写好以后,怎么样取消mock接口呢?这里给你们介绍一下vuecli当中环境变量的配置web

vuecli官网描述:附地址:https://cli.vuejs.org/zh/guide/mode-and-env.html#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%92%8C%E6%A8%A1%E5%BC%8Fajax

 

⑤咱们来实践一下,在根目录下创建 .env.development文件,写入:npm

isMock=true

⑥改造mock>index.js为: 主要区别是用process.env来判断当前环境下的变量值。为true则能够访问。

/*
 * @Descriptions: 
 * @Version: 
 * @Author: 
 * @Date: 2020-06-18 23:20:14
 * @LastEditors: dongwenjie
 * @LastEditTime: 2020-06-18 23:52:55
 */
const fs = require('fs');
const path = require('path');
const Mock = require('mockjs');
const JSON5 = require('json5');
// 读取json文件
function getJsonFile(filePath) {
  // 读取指定json文件
  var json = fs.readFileSync(path.resolve(__dirname, filePath), 'utf-8');
  // 解析并返回
  return JSON5.parse(json);
}
// 返回一个函数
module.exports = function (app) {
  if (process.env.isMock == "true") {
    // 监听http请求
    app.get('/user/userinfo', (rep, res) => {
      // 每次响应请求时读取mock data的json文件
      // getJsonFile方法定义了如何读取json文件并解析成数据对象
      var json = getJsonFile('./userInfo.json5');
      // 将json传入 Mock.mock方法,生成的数据返回给浏览器
      res.json(Mock.mock(json));
    })
  }

}

⑦尝试把isMock的值变为false,npm run serve重启服务,则:接口就变成了404。

注意环境变量的用法,在项目当中能够根据不一样环境配置不一样的文件,设置不一样的变量值,在项目当中用的十分普遍。

附第一篇连接地址:

https://my.oschina.net/u/4446873/blog/4313804

相关文章
相关标签/搜索