前后端分工协作是一个非常高效的做法,但是有时前后端分离不彻底会很痛苦。前后端应该是异步进行的,进度互不影响,但是在没有数据的时候,前端却严重依赖后端的接口,总会苦苦等待后端接口出来才能继续开发。为了解决这个问题,大神就造了一个轮子,供大家使用–Mock.js。
关于 mock.js,官网描述:
- 前后端分离
- 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据
- 数据类型丰富
- 通过随机数据,模拟各种场景
本文介绍在 vue 项目中如何使用 Mock.js
通过 vue-cli 搭建的项目(v2.9.3)
1. 安装
1
| cnpm install mockjs --save-dev
|
2. 配置
为了只在开发环境使用 Mock.js,而打包到生产环境时自动不使用 Mock.js,做以下配置:
config 目录下 dev.env.js
1 2 3 4 5 6 7 8 9
| "use strict";
const merge = require("webpack-merge"); const prodEnv = require("./prod.env");
module.exports = merge(prodEnv, { NODE_ENV: '"development"', Mock: true });
|
config 目录下 prod.env.js
1 2 3 4 5 6
| "use strict";
module.exports = { NODE_ENV: '"production"', Mock: false };
|
src 目录下 main.js
1 2
| process.env.Mock && require("./mock.js");
|
3. 创建文件
在 src 目录下创建 mock.js,内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const Mock = require("mockjs");
const Random = Mock.Random;
const produceNewsData = function() { let articles = []; for (let i = 0; i < 100; i++) { let newArticleObject = { title: Random.csentence(5, 30), thumbnail_pic_s: Random.dataImage("300x250", "mock的图片"), author_name: Random.cname(), date: Random.date() + " " + Random.time() }; articles.push(newArticleObject); } return { data: articles }; };
Mock.mock("/api/articles", "get", produceNewsData);
|
模板的功能非常强大,可以生成几乎所有类型的数据,具体参考:
官方文档:https://github.com/nuysoft/Mock/wiki
4. 页面使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| export default { data() { return { articles: [] }; }, methods: { requestData() { this.$axios .get("/api/articles") .then(response => { console.log(response); }) .catch(error => { console.log(error); }); } }, created() { this.requestData(); } };
|