Init Commit
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user