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 1.7 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import type { RequestConfig } from '@umijs/max';
  2. import { message } from 'antd';
  3. import { clearSessionToken, getAccessToken, getRefreshToken, getTokenExpireTime } from './access';
  4. const checkRegion = 5 * 60 * 1000;
  5. /**
  6. * Umi Max 网络请求配置
  7. * @doc https://umijs.org/docs/max/request#配置
  8. */
  9. export const requestConfig: RequestConfig = {
  10. errorConfig: {},
  11. requestInterceptors: [
  12. (url: any, options: { headers: any }) => {
  13. const headers = options.headers ? options.headers : [];
  14. const authHeader = headers['Authorization'];
  15. const isToken = headers['isToken'];
  16. if (!authHeader && isToken !== false) {
  17. const expireTime = getTokenExpireTime();
  18. if (expireTime) {
  19. const left = Number(expireTime) - new Date().getTime();
  20. const refreshToken = getRefreshToken();
  21. if (left < checkRegion && refreshToken) {
  22. if (left < 0) {
  23. clearSessionToken();
  24. }
  25. } else {
  26. const accessToken = getAccessToken();
  27. if (accessToken) {
  28. headers['Authorization'] = `Bearer ${accessToken}`;
  29. }
  30. }
  31. } else {
  32. clearSessionToken();
  33. }
  34. }
  35. return { url, options };
  36. },
  37. ],
  38. responseInterceptors: [
  39. (response: any) => {
  40. const { status, data } = response;
  41. // console.log('response', response);
  42. if (status >= 200 && status < 300 && data && (data instanceof Blob || data.code === 200)) {
  43. return response;
  44. } else {
  45. if (data && data.msg) {
  46. message.error(data.msg);
  47. } else {
  48. message.error('请求失败');
  49. }
  50. return Promise.reject(response);
  51. }
  52. },
  53. ],
  54. };