Init Commit

This commit is contained in:
2026-06-04 16:26:23 +09:00
commit 1e64827f57
64 changed files with 10718 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
/**
* 使用方法:
* - 导入该http组件
* import http from '@/utils/http';
* - 发 GET 自动带cookie
* const { data } = await http.get('/userinfo');
* - 发 POST,也会自动带 cookie
* await http.post('/posts', { title: 'hello' });
*/
import axios from 'axios';
const http = axios.create({
baseURL: 'https://rop.cc/apitest/cookie',
timeout: 5000,
withCredentials: true //提示浏览器,带上cookie
});
// 请求拦截器:自动附加 token
// http.interceptors.request.use(cfg => {
// cfg.headers['Authorization'] = `Bearer ${token}`;
// return cfg;
// }, err => Promise.reject(err));
// 响应拦截器:统一处理 401(未授权)
http.interceptors.response.use(res => res, err => {
// 检查错误类型是否为 AxiosError,并且是否为超时错误
if (err.code === 'ECONNABORTED' && err.message.includes('timeout')) {
// 超时错误的处理
console.error('请求超时:', err.message);
alert('请求超时,请稍后再试');
return Promise.resolve(); // 返回一个 resolved promise,防止继续传播
}
if (err.response) {
const status = err.response.status;
switch (status) {
case 401:
// 重定向到登录页
window.location.href = '/apitest/login';
break;
case 403:
alert('权限不足,请联系管理员');
break;
case 404:
console.warn('请求的资源未找到');
break;
case 500:
alert('服务器出错,请稍后再试');
break;
case 502:
alert('网关错误,请稍后再试');
break;
case 503:
alert('服务不可用,请稍后再试');
break;
case 504:
alert('网关超时,请稍后再试');
break;
default:
console.error('请求失败:', err);
}
return Promise.resolve();
} else {
// 非响应错误
console.error('非响应错误:', err);
// 处理非响应错误
if (err instanceof Error) {
alert('请求失败,请检查网络连接');
}
}
return Promise.reject(err);
});
export default http;