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. message: string;
  15. result: T;
  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 accessStore.getAccessToken;
  30. },
  31. // 默认
  32. key: 'Authorization',
  33. };
  34. },
  35. });
  36. setupRequestInterceptors(client);
  37. const request = client.request.bind(client);
  38. const get = client.get.bind(client);
  39. const post = client.post.bind(client);
  40. return {
  41. get,
  42. post,
  43. request,
  44. };
  45. }
  46. function setupRequestInterceptors(client: RequestClient) {
  47. client.addResponseInterceptor(
  48. (response: AxiosResponse<HttpResponse>) => {
  49. const { data: responseData, status } = response;
  50. const { code, message: msg, result } = responseData;
  51. if (status === 200 && code === 0) {
  52. return result;
  53. } else {
  54. message.error(msg);
  55. throw new Error(msg);
  56. }
  57. },
  58. (error: any) => {
  59. if (isCancelError(error)) {
  60. return Promise.reject(error);
  61. }
  62. const err: string = error?.toString?.() ?? '';
  63. let errMsg = '';
  64. if (err?.includes('Network Error')) {
  65. errMsg = '网络错误。';
  66. } else if (error?.message?.includes?.('timeout')) {
  67. errMsg = '请求超时。';
  68. } else {
  69. errMsg = error?.response?.data?.error?.message ?? '';
  70. }
  71. message.error(errMsg);
  72. return Promise.reject(error);
  73. },
  74. );
  75. }
  76. const { get, post, request } = createRequestClient();
  77. // 其他配置的请求方法
  78. // const { request: xxxRequest } = createRequest();
  79. export { get, post, request };