1.在src/utils下新建request.js
    2.request.js代码如下

    1. import { notification} from 'antd';
    2. import { getAccessToken, getRefreshToken, getTokenExpireTime, clearToken} from '@/utils/authority';
    3. /**请求拦截 */
    4. // 更换令牌的时间区间
    5. const checkRegion = 5 * 60 * 1000;
    6. export const requestInterceptors= (url, options) => {
    7. const headers = options.headers ? options.headers : [];
    8. if (headers['Authorization'] === '' || headers['Authorization'] == null) {
    9. const expireTime = getTokenExpireTime();
    10. if (expireTime) {
    11. const left = Number(expireTime) - new Date().getTime();
    12. const refreshToken = getRefreshToken();
    13. if (left < checkRegion && refreshToken) {
    14. if (left < 0) {
    15. clearToken();
    16. }
    17. } else {
    18. const accessToken = getAccessToken();
    19. // console.log("accessToken:",accessToken);
    20. if (accessToken) {
    21. headers['Authorization'] = `Bearer ${accessToken}`;
    22. }
    23. }
    24. }
    25. }
    26. // console.log(headers)
    27. return {
    28. url,
    29. options: { ...options, headers },
    30. };
    31. }
    32. // 响应拦截
    33. export const responseInterceptors= async (response) => {
    34. if (!response) {
    35. notification.error({
    36. description: '您的网络发生异常,无法连接服务器',
    37. message: '网络异常',
    38. });
    39. return;
    40. }
    41. const code = response.code;
    42. if (code === 401 || code === 403) {
    43. localStorage.removeItem('access_token');
    44. window.location.href = '/user/login';
    45. }
    46. return response;
    47. }
    48. const codeMessage = {
    49. 200: '服务器成功返回请求的数据。',
    50. 201: '新建或修改数据成功。',
    51. 202: '一个请求已经进入后台排队(异步任务)。',
    52. 204: '删除数据成功。',
    53. 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
    54. 401: '用户没有权限(令牌、用户名、密码错误)。',
    55. 403: '用户得到授权,但是访问是被禁止的。',
    56. 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
    57. 405: '请求方法不被允许。',
    58. 406: '请求的格式不可得。',
    59. 410: '请求的资源被永久删除,且不会再得到的。',
    60. 422: '当创建一个对象时,发生一个验证错误。',
    61. 500: '服务器发生错误,请检查服务器。',
    62. 502: '网关错误。',
    63. 503: '服务不可用,服务器暂时过载或维护。',
    64. 504: '网关超时。',
    65. };
    66. /**
    67. * 异常处理程序
    68. */
    69. export const errorHandler = (error) => {
    70. const { response } = error;
    71. if (response && response.status) {
    72. const errorText = codeMessage[response.status] || response.statusText;
    73. const { status, url } = response;
    74. notification.error({
    75. message: `请求错误 ${status}: ${url}`,
    76. description: errorText,
    77. });
    78. }
    79. if (!response) {
    80. notification.error({
    81. description: '您的网络发生异常,无法连接服务器',
    82. message: '网络异常',
    83. });
    84. }
    85. throw error;
    86. };

    3.代码的主要逻辑就是在请求前进行拦截,判断在header中是否有Authorization,如果没有且未过期,按照jwt格式Bearer+token方式设置headers[‘Authorization’]=Bearer+token。
    4.请求前拦截:requestInterceptors及响应后拦截:responseInterceptors参见antd pro v5官网文档
    https://pro.ant.design/zh-CN/docs/request/