前言
最近在了解公司的项目,发现给我的两个项目是基于vue-element-admin这一个后台管理系统框架写的,在看这个框架的时候,发现了一个很有意思的js插件Mock.js 官方文档
作用
- 生成随机数据,拦截Ajax请求
优点
- 前后端分离
- 无侵入开发
- 支持随机数据类型丰富
- 可用于单元测试
- 用法简单
- 支持拓展
项目实践
项目环境
- "vue": "^3.0.0"
- "mockjs": "^1.1.0"
- "axios": "^0.21.1"
实践步骤
- 在src/main.ts文件中引入,添加如下代码(可以通过process.env.NODE_ENV的判断来决定是否在生产环境中使用)
// 载入mockjs
// if (process.env.NODE_ENV != \"production\") {
require(\"./mock\");
// }
- 在src目录下创建mock文件夹用于管理mock.js相关文件
- mock文件夹下创建index.js文件,用于工程化管理子文件
- index.js文件内容
import Mock from \"mockjs\";
// 存储mock的接口对象
let configArr = [];
// 一个webpack的api,通过执行require.context函数获取一个特定的上下文,用于实现自动化导入模块
// 使用情况:导入一个文件夹的多个模块,它会遍历文件夹中的指定文件
// 该行代码导入了该文件夹下所有js文件
const files = require.context(\".\", true, /\\.js$/);
const map = {};
// keys:匹配成功模块的名字组成的数组
for (const key of files.keys()) {
map[key] = files(key);
}
// 将文件中的每一个对象都遍历出来
files.keys().map((key) => {
if (key === \"./index.js\") {
return;
}
configArr = configArr.concat(map[key].default);
});
console.log(configArr);
// 拦截需要mock的接口
configArr.forEach((item) => {
const { url, type, response } = item;
Mock.mock(new RegExp(url), type || \"get\", response);
});
- 创建其他子文件,用于储存处mock数据
- 比如说创建share.js
/* eslint-disable prettier/prettier */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
export default [
{
// 拦截的api接口地址
url: \"/api/share/getShareList\",
//接口类型
type: \"get\",
// 返回数据
response: (config) => {
return {
status: 200,
data: {
list:shareList,
pages:1,
}
};
}
}
];
const shareList = [
{
share_title: \"MD调色盘\",
share_desc: \"可以帮你生成遵循MDUI规范的调色盘网站,我想不出色彩搭配时都会来这里自动生成,搭配色彩\",
share_label: \"#网站\",
share_url: \"https://www.materialpalette.com/\",
share_id: \"1\",
share_time: \"2021/09/16\",
share_like:0,
imgUrl:'https://www.materialpalette.com/favicon.ico'
}
];
- 如上创建完毕后即将mock集成到了项目中并对其进行了模块化管理
- 将来需要拓展时只需要新建类似share.js文件并配置响应接口以及数据信息即可