手把手撸后台-VUE3_VITE_MOCK
在 vue3 项目中引入 mock
- 安装 Mock 与 vite-plugin-mock
js
npm i mockjs vite-plugin-mock --save-dev
安装 axios 依赖
js
npm i axios
配置 vite.config.ts
- 在 vite.config.ts 中引入 vite-plugin-mock 插件
js
import { fileURLToPath, URL } from "node:url";
import { viteMockServe } from "vite-plugin-mock";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
viteMockServe({
supportTs: false, // -是否读取ts文件模块,设置为true时不能读取js文件
logger: false, // 是否在控制台显示请求日志
mockPath: "./mock", // 注意:此时的 mockPath 地址是真正安装的 mock 文件夹的地址;
}),
],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
});
vite 的配置文档及其 mockjs 官方文档
- vite 配置文档地址
bash
https://vitejs.dev/config/
- mockjs 官方文档地址
bash
http://mockjs.com/examples.html
创建 mock 文件夹
在根目录下创建
mock
文件夹及index.js
文件:创建
mock
文件夹后的目录结构:
配置 mock 文件夹下面的 index.js
bash
body 就是 post,quesy 就是 get
js
// 下面是导出一个数组;
export default [
// user login
{
url: "/api/loginpost",
type: "post",
response: (config) => {
console.log(config);
const { username, password } = config.body;
console.log(username);
console.log(password);
// mock error
return {
code: 200,
message: "测试post接口",
};
},
},
{
url: "/api/loginget",
type: "get",
response: (config) => {
console.log(config);
const { username, password } = config.query;
console.log(username);
console.log(password);
// mock error
return {
code: 200,
message: "测试get接口",
};
},
},
];
使用
- 创建 request.js 文件
js
import axios from "axios";
// create an axios instance
const service = axios.create({
// baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 5000, // request timeout
});
// request interceptor
service.interceptors.request.use(
(config) => {
// do something before request is sent
return config;
},
(error) => {
// do something with request error
console.log(error); // for debug
return Promise.reject(error);
}
);
// response interceptor
service.interceptors.response.use(
/**
* If you want to get http information such as headers or status
* Please return response => response
*/
/**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/
(response) => {
const res = response.data;
console.log(res);
// if the custom code is not 20000, it is judged as an error.
if (res.code !== 200) {
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
return Promise.reject(new Error(res.message || "Error"));
} else {
console.log("进来了啊");
return res;
}
},
(error) => {
console.log("err" + error); // for debug
return Promise.reject(error);
}
);
export default service;
- 创建 api 文件注意路径需要对上
bash
data 就是 post get 就是 params
js
import request from "@/api/request";
export const loginApi = (data) => {
return request({
url: "/api/loginpost",
method: "post",
data,
});
};
export const loginApi2 = (params) => {
return request({
url: "/api/loginget",
method: "get",
params,
});
};
- 使用
html
<button @click="handleget">测试get接口</button>
<button @click="handlepost">测试post接口</button>
<script>
import { loginApi, loginApi2 } from "@/api/loginapi/loginapi.js";
const handleget = () => {
loginApi2({
username: "admin",
password: "123456",
}).then((res) => {
console.log(res);
});
};
const handlepost = () => {
loginApi({
username: "admin",
password: "123456",
}).then((res) => {
console.log(res);
});
};
</script>