Mock 之搭建本地 MockJs
一、目的
模拟后端接口
二、发请求
1. install
npm install axios
2. 配置
src/utils/request.js
import axios from "axios"; // axios 导入包
const service = axios.create({}); // axios 简单配置
// /api/user/id token
service.interceptors.request.use((config) => {
return config;
}); // axios 请求拦截
service.interceptors.response.use((response) => {
const { data } = response;
// if (data.status == 200) {
// } else if (data.status == 403) {
// }
return data;
}); // axios响应拦截
export default service;
3. 对接口发起请求
src/api/index.js
import request from "@/utils/request";
export const getUsers = () =>
request({
url: "/api/users",
method: "get",
});
- axios 发起请求的代码都维护在 api 下。
三、Mock 模拟响应
1. install
npm install mockjs
2. 配置
src/mock/index.js
import Mock from "mockjs";
// example 相关
Mock.mock("/api/users", "get", function () {
return Mock.mock({
status: "200",
msg: "请求成功",
"data|3": [
{
name: "@cname", // Mock.Random.cname(),
age: "@integer(20,50)",
},
],
});
});
3. 把 mock 导入 main.js
导入才会执行,数据才会成功。
main.js
import "@/mock";
四、请求成功且 mock 成功
1. About.vue
src/views/About.vue
<template>
<!-- axios & mock-验证 -->
<div v-for="(item) in list" :key="item.name">
<span>{{item.name}}</span>
<span>{{item.age}}</span>
</div>
</template>
<script>
import { getUsers } from '@/api'
import { onMounted, reactive, toRefs } from 'vue'
export default {
setup(){
const data = reactive({
list: []
})
onMounted(()=>{
getUsers().then(res=>{
console.log(res)
data.list = res.data
})
})
const dataAsRefs = toRefs(data)
return dataAsRefs
}
}
</script>
五、优化 mock 代码
1. example 模块化
src/mock/example.js
import Mock from "mockjs";
export default {
getUsers: () => {
return Mock.mock({
status: "200",
msg: "请求成功",
"data|3": [
{
name: "@cname", // Mock.Random.cname(),
age: "@integer(20,50)",
},
],
});
},
};
2. mock 入口文件配置
src/mock/index.js
import Mock from "mockjs";
import example from "./example";
// example 相关
Mock.mock("/api/users", "get", example.getUsers);
export default Mock;
六、实际开发注意事项
1. 配置 baseURL 导致错误:
如果 axios.create({...}) 配置了 baseURL ,上一部分代码为:
src/mock/index.js
import GlobalUrl "@/request/巴啦啦小魔仙"
import Mock from "mockjs";
import example from "./example";
Mock.mock(GlobalUrl+"/api/users", "get", example.getUsers);
export default Mock;