接口接口优化
This commit is contained in:
parent
a3ec8f47f4
commit
b12b87b17f
@ -1,20 +1,20 @@
|
|||||||
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
|
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios";
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from "ant-design-vue";
|
||||||
|
|
||||||
// 创建axios实例
|
// 创建axios实例
|
||||||
const request: AxiosInstance = axios.create({
|
const request: AxiosInstance = axios.create({
|
||||||
// 由各调用方提供完整路径(例如 /api/v1/teacher/tasks),这里不再追加前缀
|
// 由各调用方提供完整路径(例如 /api/v1/teacher/tasks),这里不再追加前缀
|
||||||
baseURL: '',
|
baseURL: "",
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// 请求拦截器
|
// 请求拦截器
|
||||||
request.interceptors.request.use(
|
request.interceptors.request.use(
|
||||||
(config) => {
|
(config) => {
|
||||||
const token = localStorage.getItem('token');
|
const token = localStorage.getItem("token");
|
||||||
if (token) {
|
if (token) {
|
||||||
config.headers.Authorization = `Bearer ${token}`;
|
config.headers.Authorization = `Bearer ${token}`;
|
||||||
}
|
}
|
||||||
@ -22,14 +22,20 @@ request.interceptors.request.use(
|
|||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// 响应拦截器
|
// 响应拦截器
|
||||||
request.interceptors.response.use(
|
request.interceptors.response.use(
|
||||||
(response: AxiosResponse) => {
|
(response: AxiosResponse) => {
|
||||||
|
console.log(response);
|
||||||
// 直接返回响应数据
|
// 直接返回响应数据
|
||||||
return response.data;
|
// @ts-ignore
|
||||||
|
if (config._new === true) {
|
||||||
|
return response.data;
|
||||||
|
} else {
|
||||||
|
return response.data.data;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
const { response } = error;
|
const { response } = error;
|
||||||
@ -39,33 +45,33 @@ request.interceptors.response.use(
|
|||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 401:
|
case 401:
|
||||||
message.error('登录已过期,请重新登录');
|
message.error("登录已过期,请重新登录");
|
||||||
localStorage.removeItem('token');
|
localStorage.removeItem("token");
|
||||||
localStorage.removeItem('user');
|
localStorage.removeItem("user");
|
||||||
localStorage.removeItem('role');
|
localStorage.removeItem("role");
|
||||||
localStorage.removeItem('name');
|
localStorage.removeItem("name");
|
||||||
window.location.href = '/login';
|
window.location.href = "/login";
|
||||||
break;
|
break;
|
||||||
case 403:
|
case 403:
|
||||||
message.error('没有权限访问');
|
message.error("没有权限访问");
|
||||||
break;
|
break;
|
||||||
case 404:
|
case 404:
|
||||||
message.error('请求的资源不存在');
|
message.error("请求的资源不存在");
|
||||||
break;
|
break;
|
||||||
case 500:
|
case 500:
|
||||||
message.error('服务器错误');
|
message.error("服务器错误");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
message.error(data?.message || '请求失败');
|
message.error(data?.message || "请求失败");
|
||||||
}
|
}
|
||||||
} else if (error.code === 'ECONNABORTED') {
|
} else if (error.code === "ECONNABORTED") {
|
||||||
message.error('请求超时');
|
message.error("请求超时");
|
||||||
} else {
|
} else {
|
||||||
message.error('网络错误');
|
message.error("网络错误");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// 导出请求方法
|
// 导出请求方法
|
||||||
@ -77,11 +83,19 @@ export const http = {
|
|||||||
return request.get(url, config);
|
return request.get(url, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
|
post<T = any>(
|
||||||
|
url: string,
|
||||||
|
data?: any,
|
||||||
|
config?: AxiosRequestConfig,
|
||||||
|
): Promise<T> {
|
||||||
return request.post(url, data, config);
|
return request.post(url, data, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
|
put<T = any>(
|
||||||
|
url: string,
|
||||||
|
data?: any,
|
||||||
|
config?: AxiosRequestConfig,
|
||||||
|
): Promise<T> {
|
||||||
return request.put(url, data, config);
|
return request.put(url, data, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -89,7 +103,11 @@ export const http = {
|
|||||||
return request.delete(url, config);
|
return request.delete(url, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
|
patch<T = any>(
|
||||||
|
url: string,
|
||||||
|
data?: any,
|
||||||
|
config?: AxiosRequestConfig,
|
||||||
|
): Promise<T> {
|
||||||
return request.patch(url, data, config);
|
return request.patch(url, data, config);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -2,9 +2,11 @@
|
|||||||
* orval mutator - 让自动生成的 API 复用项目 axios 实例
|
* orval mutator - 让自动生成的 API 复用项目 axios 实例
|
||||||
* 带 token 注入、统一错误处理、Result<T> 自动解包
|
* 带 token 注入、统一错误处理、Result<T> 自动解包
|
||||||
*/
|
*/
|
||||||
import type { AxiosRequestConfig } from 'axios'
|
import type { AxiosRequestConfig } from "axios";
|
||||||
import axiosInstance from './index'
|
import axiosInstance from "./index";
|
||||||
|
|
||||||
export const request = <T>(config: AxiosRequestConfig): Promise<T> => {
|
export const request = <T>(config: AxiosRequestConfig): Promise<T> => {
|
||||||
return axiosInstance(config) as Promise<T>
|
// @ts-ignore
|
||||||
}
|
config._new = true;
|
||||||
|
return axiosInstance(config) as Promise<T>;
|
||||||
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user