一般封装
ts
import axios, {
AxiosInstance,
AxiosResponse,
InternalAxiosRequestConfig,
} from "axios";
// 定义响应数据结构
interface ResponseData<T = any> {
code: number;
data: T;
message: string;
}
// 创建 axios 实例
const api: AxiosInstance = axios.create({
baseURL: import.meta.env.VITE_BASE_API || "/api",
timeout: 10000,
headers: {
"Content-Type": "application/json",
},
});
// 请求拦截器
api.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
// 添加 token
const token = localStorage.getItem("token");
if (token && config.headers) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error: any) => {
return Promise.reject(error);
}
);
// 响应拦截器
api.interceptors.response.use(
(response: AxiosResponse<ResponseData>) => response,
(error: any) => {
if (error.response) {
switch (error.response.status) {
case 401:
console.error("未授权,请重新登录");
break;
case 403:
console.error("无权限访问");
break;
case 404:
console.error("请求资源不存在");
break;
default:
console.error("服务器错误");
}
}
return Promise.reject(error);
}
);
export default api;