index.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * 该文件可自行根据业务逻辑进行调整
  3. */
  4. import type { AxiosResponse } from '@vben-core/request';
  5. import { RequestClient, isCancelError } from '@vben-core/request';
  6. import { useAccessStore } from '@vben-core/stores';
  7. import { message } from 'ant-design-vue';
  8. interface HttpResponse<T = any> {
  9. /**
  10. * 0 表示成功 其他表示失败
  11. * 0 means success, others means fail
  12. */
  13. code: number;
  14. data: T;
  15. message: string;
  16. }
  17. /**
  18. * 创建请求实例
  19. * Create a request instance
  20. */
  21. function createRequestClient() {
  22. const client = new RequestClient({
  23. baseURL: import.meta.env.VITE_GLOB_API_URL,
  24. // 为每个请求携带 Authorization
  25. makeAuthorization: () => {
  26. return {
  27. handler: () => {
  28. const accessStore = useAccessStore();
  29. return {
  30. refreshToken: `Bearer ${accessStore.getRefreshToken}`,
  31. token: `Bearer ${accessStore.getAccessToken}`,
  32. };
  33. },
  34. // 默认
  35. key: 'Authorization',
  36. };
  37. },
  38. });
  39. setupRequestInterceptors(client);
  40. return client;
  41. }
  42. function setupRequestInterceptors(client: RequestClient) {
  43. client.addResponseInterceptor(
  44. (response: AxiosResponse<HttpResponse>) => {
  45. const { data: responseData, status } = response;
  46. const { code, data, message: msg } = responseData;
  47. if (status >= 200 && status < 400 && code === 0) {
  48. return data;
  49. } else {
  50. message.error(msg);
  51. throw new Error(msg);
  52. }
  53. },
  54. (error: any) => {
  55. if (isCancelError(error)) {
  56. return Promise.reject(error);
  57. }
  58. const err: string = error?.toString?.() ?? '';
  59. let errMsg = '';
  60. if (err?.includes('Network Error')) {
  61. errMsg = '网络错误。';
  62. } else if (error?.message?.includes?.('timeout')) {
  63. errMsg = '请求超时。';
  64. } else {
  65. const data = error?.response?.data;
  66. errMsg = (data?.message || data?.error?.message) ?? '';
  67. }
  68. message.error(errMsg);
  69. return Promise.reject(error);
  70. },
  71. );
  72. }
  73. const requestClient = createRequestClient();
  74. // 其他配置的请求方法
  75. // const { request: xxxRequest } = createRequest();
  76. export { requestClient };