You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

requestConfig.ts 2.6 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * @Author: 赵伟
  3. * @Date: 2024-03-25 13:52:54
  4. * @Description: 网络请求配置,详情请参考 https://umijs.org/docs/max/request
  5. */
  6. import type { AxiosRequestConfig, AxiosResponse, RequestConfig, RequestOptions } from '@umijs/max';
  7. import { message } from 'antd';
  8. import { clearSessionToken, getAccessToken } from './access';
  9. import { setRemoteMenu } from './services/session';
  10. import Loading from './utils/loading';
  11. import { gotoLoginPage } from './utils/ui';
  12. // [antd: Notification] You are calling notice in render which will break in React 18 concurrent mode. Please trigger in effect instead.
  13. const popupError = (error: string, skipErrorHandler: boolean | undefined = false) => {
  14. if (skipErrorHandler) {
  15. return;
  16. }
  17. // 直接调用 message.error 有时候不弹出来
  18. setTimeout(() => {
  19. message.error(error);
  20. }, 100);
  21. };
  22. /**
  23. * Umi Max 网络请求配置
  24. * @doc https://umijs.org/docs/max/request#配置
  25. */
  26. export const requestConfig: RequestConfig = {
  27. timeout: 120 * 1000,
  28. requestInterceptors: [
  29. (url: string, options: AxiosRequestConfig) => {
  30. const headers = options.headers ?? {};
  31. const authHeader = headers['Authorization'];
  32. const isToken = headers['isToken'];
  33. if (!authHeader && isToken !== false) {
  34. const accessToken = getAccessToken();
  35. if (accessToken) {
  36. headers['Authorization'] = `Bearer ${accessToken}`;
  37. }
  38. }
  39. Loading.show();
  40. return { url, options };
  41. },
  42. ],
  43. responseInterceptors: [
  44. [
  45. (response: AxiosResponse) => {
  46. Loading.hide();
  47. const { status, data, config } = response || {};
  48. const skipErrorHandler = (config as RequestOptions)?.skipErrorHandler;
  49. if (status >= 200 && status < 300) {
  50. if (data && (data instanceof Blob || data.code === 200)) {
  51. return response;
  52. } else if (data && data.code === 401) {
  53. clearSessionToken();
  54. setRemoteMenu(null);
  55. gotoLoginPage(false);
  56. popupError('请重新登录');
  57. return Promise.reject(response);
  58. } else {
  59. popupError(data?.msg ?? '请求失败', skipErrorHandler);
  60. return Promise.reject(response);
  61. }
  62. } else {
  63. popupError('请求失败', skipErrorHandler);
  64. return Promise.reject(response);
  65. }
  66. },
  67. (error: Error) => {
  68. Loading.hide();
  69. popupError(error.message ?? '请求失败');
  70. return Promise.reject(error);
  71. },
  72. ],
  73. ],
  74. };