request.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * @Author: zc
  3. * @Description:
  4. * @version:
  5. * @Date: 2022-08-09 16:19:57
  6. * @LastEditors: Please set LastEditors
  7. * @LastEditTime: 2022-09-20 13:59:46
  8. */
  9. import axios from 'axios';
  10. import { ElMessage, ElMessageBox } from 'element-plus';
  11. import { Session } from '/@/utils/storage';
  12. // 配置新建一个 axios 实例
  13. const service = axios.create({
  14. baseURL: import.meta.env.VITE_API_URL as any,
  15. timeout: 50000,
  16. headers: { 'Content-Type': 'application/json' },
  17. });
  18. // 添加请求拦截器
  19. service.interceptors.request.use(
  20. (config:any) => {
  21. /*
  22. 测试多个baseUrl
  23. */
  24. // 在发送请求之前做些什么 token
  25. if (Session.get('token')) {
  26. (<any>config.headers).common['Authorization'] = `Bearer ${Session.get('token')}`;
  27. }
  28. return config;
  29. },
  30. (error) => {
  31. // 对请求错误做些什么
  32. return Promise.reject(error);
  33. }
  34. );
  35. // 添加响应拦截器
  36. service.interceptors.response.use(
  37. (response) => {
  38. // 对响应数据做点什么
  39. const res = response.data;
  40. if (res.code && res.code !== 0) {
  41. // `token` 过期或者账号已在别处登录
  42. if (res.code === 401 || res.code === 4001) {
  43. Session.clear(); // 清除浏览器全部临时缓存
  44. window.location.href = '/'; // 去登录页
  45. ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
  46. .then(() => {})
  47. .catch(() => {});
  48. }
  49. return Promise.reject(service.interceptors.response);
  50. } else {
  51. return response.data;
  52. }
  53. },
  54. (error) => {
  55. // 对响应错误做点什么
  56. if (error.message.indexOf('timeout') != -1) {
  57. ElMessage.error('网络超时');
  58. } else if (error.message == 'Network Error') {
  59. ElMessage.error('网络连接错误');
  60. } else if(error.response.status == 401){ //`token` 过期或者账号已在别处登录
  61. Session.clear(); // 清除浏览器全部临时缓存
  62. window.location.href = '/'; // 去登录页
  63. ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
  64. .then(() => {})
  65. .catch(() => {});
  66. }else{
  67. if (error.response.data) ElMessage.error(error.response.data.error);
  68. else ElMessage.error('接口路径找不到');
  69. }
  70. return Promise.reject(error);
  71. }
  72. );
  73. // 导出 axios 实例
  74. export default service;