yunzer_go/pc/src/utils/request.js
2025-10-29 23:07:53 +08:00

62 lines
1.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios';
// 创建axios实例
const service = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 10000, // 请求超时时间
});
// 请求拦截器
service.interceptors.request.use(
config => {
const token = localStorage.getItem('token');
if (token) {
config.headers['Authorization'] = `Bearer ${token}`;
}
// 对于有 body 的请求POST、PUT、PATCH确保设置 Content-Type
if (config.data && ['post', 'put', 'patch'].includes(config.method?.toLowerCase())) {
if (!config.headers['Content-Type'] && !config.headers['content-type']) {
config.headers['Content-Type'] = 'application/json';
}
}
return config;
},
error => {
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
response => {
return response.data;
},
error => {
if (error.response) {
switch (error.response.status) {
case 401:
// 处理未授权的错误 - 清除token并跳转登录页
console.error('未授权,请重新登录');
localStorage.removeItem('token');
// 避免循环导入,直接使用路由
if (window.location.hash !== '#/login') {
window.location.href = '#/login';
}
break;
case 404:
// 处理资源不存在的错误
console.error('请求的资源不存在');
break;
default:
console.error('请求失败,请稍后再试');
}
} else if (error.request) {
console.error('请求失败,请检查网络连接');
} else {
console.error('请求配置错误');
}
return Promise.reject(error);
}
);
export default service;