request.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import axios, { AxiosResponse, InternalAxiosRequestConfig } from 'axios';
  2. import utils from '@/utils/index';
  3. import router from '@/router'
  4. axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
  5. axios.defaults.headers['auth'] = true;
  6. // 创建 axios 实例
  7. const service = axios.create({
  8. baseURL: import.meta.env.VITE_APP_BASE_API,
  9. timeout: 5000
  10. });
  11. // 请求拦截器
  12. service.interceptors.request.use(
  13. (config: InternalAxiosRequestConfig) => {
  14. //console.log("config", config)
  15. const token = localStorage.getItem("token") || "";
  16. if (token && Boolean(config.headers['auth']) == true) {
  17. config.headers['Authorization'] = token;
  18. }
  19. if (!token && Boolean(config.headers['auth']) == true) {
  20. delete config.headers['auth']
  21. const message = "缺少凭证,请重新登录!";
  22. if (router.currentRoute.value.path != "/login") {
  23. router.push("/login");
  24. }
  25. ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
  26. return Promise.reject(message);
  27. }
  28. // get请求修改Content-Type
  29. if (config.method?.toLowerCase() === 'get') {
  30. config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
  31. }
  32. // get请求映射params参数
  33. if (config.method === 'get' && config.data) {
  34. let url = config.url + '?' + utils.tansParams(config.data);
  35. url = url.slice(0, -1);
  36. config.data = {};
  37. config.url = url;
  38. }
  39. // FormData数据去请求头Content-Type
  40. if (config.data instanceof FormData) {
  41. delete config.headers['Content-Type'];
  42. }
  43. delete config.headers['auth']
  44. return config;
  45. },
  46. (error: any) => {
  47. //console.log(error);
  48. return Promise.reject(error);
  49. }
  50. );
  51. // 响应拦截器
  52. service.interceptors.response.use(
  53. (res: AxiosResponse) => {
  54. const code = res.data.code;
  55. const message = res.data.message;
  56. if (code === 401) {
  57. router.push("/login");
  58. ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
  59. return Promise.reject('凭证已过期,请重新登录!');
  60. } else {
  61. return Promise.resolve(res.data);
  62. }
  63. },
  64. (error: any) => {
  65. let { message, response } = error;
  66. if (message == 'Network Error') {
  67. message = '网络异常';
  68. } else if (message.includes('timeout')) {
  69. message = '请求超时';
  70. } else if (message.includes('Request failed with status code')) {
  71. if (response.data.status) {
  72. message = response.data.message;
  73. } else {
  74. message = '系统接口' + message.substr(message.length - 3) + '异常';
  75. }
  76. }
  77. ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
  78. return Promise.reject(error);
  79. }
  80. );
  81. export default service;