http.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import axios, {
  2. AxiosInstance,
  3. AxiosError,
  4. AxiosRequestConfig,
  5. AxiosResponse,
  6. InternalAxiosRequestConfig
  7. } from "axios";
  8. import { showFailToast } from 'vant'
  9. import type { IResultData } from '@/types/api/index'
  10. import { getStorage } from './authStorage'
  11. enum RequestEnums {
  12. TIME_OUT = 20000,
  13. SUCCESS = 200,
  14. CODE = 0
  15. }
  16. const baseConfig = {
  17. baseURL: import.meta.env.VITE_BASE_URL,
  18. timeout: RequestEnums.TIME_OUT,
  19. withCredentials: true
  20. }
  21. interface IRequestClass {
  22. service: AxiosInstance
  23. }
  24. class RequestHttp implements IRequestClass {
  25. service: AxiosInstance;
  26. constructor(config: AxiosRequestConfig) {
  27. this.service = axios.create(config)
  28. this.service.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  29. if (!!config.headers!.isToken && getStorage()) {
  30. config.headers!['X-token'] = getStorage()
  31. }
  32. if (!config.headers['Content-Type']) {
  33. config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
  34. }
  35. return Promise.resolve(config)
  36. }, (error: AxiosError) => {
  37. showFailToast(error)
  38. // 请求报错
  39. Promise.reject(error)
  40. })
  41. this.service.interceptors.response.use((response: AxiosResponse) => {
  42. const { msg, code, error } = response.data
  43. console.log(response.data)
  44. if (response.status === 302) {
  45. window.localStorage.clear()
  46. window.location.href = `/login?redirect=${window.location.pathname}`
  47. return Promise.reject(msg)
  48. }
  49. if (response.status === 404) {
  50. showFailToast(error)
  51. return Promise.reject(msg)
  52. }
  53. if (code !== RequestEnums.CODE) {
  54. showFailToast(msg)
  55. return Promise.reject(msg)
  56. }
  57. return Promise.resolve(response.data)
  58. }, (error: AxiosError) => {
  59. showFailToast(error)
  60. return Promise.reject(error)
  61. })
  62. }
  63. get<T>(url: string, params?: Object): Promise<IResultData<T>> {
  64. return this.service.get(url, { params })
  65. }
  66. post<T>(url: string, data: object): Promise<IResultData<T>> {
  67. return this.service.post(url, data);
  68. }
  69. put<T>(url: string, data?: object): Promise<IResultData<T>> {
  70. return this.service.put(url, data);
  71. }
  72. delete<T>(url: string, data?: object): Promise<IResultData<T>> {
  73. return this.service.delete(url, data);
  74. }
  75. }
  76. export default new RequestHttp(baseConfig)