Files
Message-Push-Nest/web/src/api/api.js
T

94 lines
2.7 KiB
JavaScript
Raw Normal View History

2023-12-30 17:40:20 +08:00
// request.js
import axios from 'axios';
import { ElMessage } from 'element-plus'
import { usePageState } from '../store/page_sate';
import { CONSTANT } from '../constant';
const ERR_NETWORK = "ERR_NETWORK";
const request = axios.create({
baseURL: 'http://127.0.0.1:8000',
timeout: 50000,
withCredentials: true, // 允许发送跨域凭证(例如,用于保持登录状态)
});
// 请求拦截器
request.interceptors.request.use(
(config) => {
const pageState = usePageState();
// console.log('config', config);
if (!CONSTANT.NO_AUTH_URL.includes(config.url)) {
config.url = '/api/v1' + config.url;
}
if (pageState.Token && !CONSTANT.NO_AUTH_URL.includes(config.url)) {
// 添加 token 参数到 URL 中
config.headers = {
...config.headers,
'm-token': pageState.Token,
};
}
return config;
},
(error) => {
// 处理请求错误
handleException(error);
// return Promise.reject(error);
}
);
// 响应拦截器
request.interceptors.response.use(
(response) => {
// console.log('request.interceptors.response', response);
if (response && response.data.code != 200) {
ElMessage({ message: response.data.msg, type: 'error' })
// Promise.reject();
}
return response;
},
(error) => {
if (error.response && error.response.status === 401) {
// 未授权,可能是登录状态过期,执行登出操作
logout();
2024-01-01 13:09:44 +08:00
} else if (20000 <= error.response.status <= 29999) {
logout();
2023-12-30 17:40:20 +08:00
}
2024-01-01 13:09:44 +08:00
2023-12-30 17:40:20 +08:00
handleException(error);
// return Promise.reject(error);
}
);
// 异常处理
const handleException = (error) => {
console.log('handleException', error);
if (error.code == ERR_NETWORK) {
ElMessage({ message: `网络错误!`, type: 'error' })
} else if (error.response && error.response.data.code != 200) {
ElMessage({ message: error.response.data.msg, type: 'error' })
};
// if (error.response) {
// // 服务器返回错误状态码
// console.error('Server Error:', error.response.status, error.response.data);
// } else if (error.request) {
// // 请求发送成功,但没有收到响应
// console.error('No response received:', error.request);
// } else {
// // 其他错误
// console.error('Error:', error.message);
// }
};
// 登出系统
const logout = () => {
2024-01-01 13:09:44 +08:00
const pageState = usePageState();
pageState.setIsLogin(true);
localStorage.setItem(CONSTANT.STORE_TOKEN_NAME, "");
2023-12-30 17:40:20 +08:00
};
export { request, handleException, logout };