httpClient.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { message } from "ant-design-vue";
  2. import axios, { AxiosError, type AxiosRequestConfig } from "axios";
  3. import { routeToLogin } from "@/router";
  4. import type { MessageType } from "ant-design-vue/lib/message";
  5. import type { ResponseData } from "@/types/httpClients.types";
  6. const urlPrefix = "/";
  7. const httpClient = axios.create({
  8. baseURL: urlPrefix,
  9. timeout: 60000,
  10. });
  11. // 添加请求拦截器
  12. httpClient.interceptors.request.use(function (config: AxiosRequestConfig) {
  13. // 在发送请求之前做些什么
  14. const token = localStorage.getItem("token");
  15. if (token && config.headers) {
  16. config.headers.Authorization = token;
  17. }
  18. return config;
  19. },
  20. function (error) {
  21. // 对请求错误做些什么
  22. return Promise.reject(error);
  23. }
  24. );
  25. let errorMsgHandler: MessageType | null = null;
  26. // 添加响应拦截器
  27. httpClient.interceptors.response.use(
  28. function (response) {
  29. // 对响应数据做点什么
  30. return response;
  31. },
  32. function (error: AxiosError<ResponseData<string>>) {
  33. if (error.response?.status == 404) {
  34. message.error("请求参数错误!");
  35. } else if (error.response?.status == 401) {
  36. routeToLogin();
  37. } else if (error.response?.status == 400) {
  38. message.error(error.response.data.msg);
  39. } else if (error) {
  40. if (errorMsgHandler != null) {
  41. errorMsgHandler();
  42. }
  43. errorMsgHandler = message.error(error.message);
  44. // routeToLogin();
  45. }
  46. return Promise.reject(error);
  47. }
  48. );
  49. export default httpClient;