先后端联调通常的逻辑是,前端经过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