request.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import axios, { type AxiosRequestConfig, type AxiosResponse, isAxiosError } from "axios";
  2. import router from '@/router'; // 引入Vue Router实例
  3. import { useTokenStore } from '@/stores/mytoken'; // 引入Pinia store
  4. // 创建 axios 实例
  5. const request = axios.create({
  6. baseURL: import.meta.env.VITE_API_URL, // 使用环境变量配置的API URL
  7. timeout: 10000,
  8. headers: {
  9. 'Content-Type': 'application/json',
  10. },
  11. });
  12. // 请求拦截器
  13. request.interceptors.request.use(
  14. (config) => {
  15. if (!config.headers) {
  16. config.headers = {} as any; // 强制转换以避免类型不匹配的问题
  17. }
  18. console.log('Starting Request', config); // 调试信息
  19. return config; // 记得返回配置
  20. },
  21. (error) => {
  22. console.error('Request error:', error);
  23. return Promise.reject(error);
  24. }
  25. );
  26. // 响应拦截器(可选)
  27. request.interceptors.response.use(
  28. (response: AxiosResponse) => response,
  29. async (error) => {
  30. if (isAxiosError(error)) {
  31. console.error('Response error:', error.message);
  32. if (error.response && error.response.status === 401) {
  33. // 如果是401未授权错误,则清除token并重定向到登录页
  34. const tokenStore = useTokenStore();
  35. tokenStore.clearToken(); // 清除token信息
  36. router.push('/login'); // 重定向到登录页面
  37. }
  38. }
  39. return Promise.reject(error);
  40. }
  41. );
  42. console.log('Base URL:', request.defaults.baseURL); // 打印检查
  43. export default request;