54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
// src/utils/request.ts
|
||
import axios, { AxiosInstance, InternalAxiosRequestConfig } from 'axios';
|
||
|
||
// 从环境变量读取基础 URL
|
||
const BASE_URL = import.meta.env.VITE_API_BASIC
|
||
console.log('API Basic URL:',import.meta.env.VITE_API_BASIC);
|
||
console.log('All env:', import.meta.env);
|
||
// 创建 axios 实例
|
||
const request: AxiosInstance = axios.create({
|
||
baseURL: BASE_URL,
|
||
timeout: 10000, // 10 秒超时
|
||
withCredentials: false, // 跨域请求时发送 cookies
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
});
|
||
|
||
// 请求拦截器(可选:加 token、loading 等)
|
||
request.interceptors.request.use(
|
||
(config: InternalAxiosRequestConfig) => {
|
||
// 例如:从 localStorage 获取 token
|
||
const token = localStorage.getItem('token');
|
||
if (token) {
|
||
config.headers.Authorization = `Bearer ${token}`;
|
||
}
|
||
return config;
|
||
},
|
||
(error) => {
|
||
return Promise.reject(error);
|
||
}
|
||
);
|
||
|
||
// 响应拦截器(统一处理错误、code 等)
|
||
request.interceptors.response.use(
|
||
(response) => {
|
||
|
||
// 假设后端返回格式为 { code: 200, data: ..., message: '' }
|
||
const { code, data, message } = response.data;
|
||
console.log('Response Data:', response.data);
|
||
if (code === 1) {
|
||
return data;
|
||
} else {
|
||
// 可抛出业务错误
|
||
return Promise.reject(new Error(message || '请求失败'));
|
||
}
|
||
},
|
||
(error) => {
|
||
// 网络错误 or 超时等
|
||
|
||
return Promise.reject(error.response.data);
|
||
}
|
||
);
|
||
|
||
export default request; |