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.2 kB

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