1.在src/utils下新建request.js
2.request.js代码如下
import { notification} from 'antd';import { getAccessToken, getRefreshToken, getTokenExpireTime, clearToken} from '@/utils/authority';/**请求拦截 */// 更换令牌的时间区间const checkRegion = 5 * 60 * 1000;export const requestInterceptors= (url, options) => {const headers = options.headers ? options.headers : [];if (headers['Authorization'] === '' || headers['Authorization'] == null) {const expireTime = getTokenExpireTime();if (expireTime) {const left = Number(expireTime) - new Date().getTime();const refreshToken = getRefreshToken();if (left < checkRegion && refreshToken) {if (left < 0) {clearToken();}} else {const accessToken = getAccessToken();// console.log("accessToken:",accessToken);if (accessToken) {headers['Authorization'] = `Bearer ${accessToken}`;}}}}// console.log(headers)return {url,options: { ...options, headers },};}// 响应拦截export const responseInterceptors= async (response) => {if (!response) {notification.error({description: '您的网络发生异常,无法连接服务器',message: '网络异常',});return;}const code = response.code;if (code === 401 || code === 403) {localStorage.removeItem('access_token');window.location.href = '/user/login';}return response;}const codeMessage = {200: '服务器成功返回请求的数据。',201: '新建或修改数据成功。',202: '一个请求已经进入后台排队(异步任务)。',204: '删除数据成功。',400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',401: '用户没有权限(令牌、用户名、密码错误)。',403: '用户得到授权,但是访问是被禁止的。',404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',405: '请求方法不被允许。',406: '请求的格式不可得。',410: '请求的资源被永久删除,且不会再得到的。',422: '当创建一个对象时,发生一个验证错误。',500: '服务器发生错误,请检查服务器。',502: '网关错误。',503: '服务不可用,服务器暂时过载或维护。',504: '网关超时。',};/*** 异常处理程序*/export const errorHandler = (error) => {const { response } = error;if (response && response.status) {const errorText = codeMessage[response.status] || response.statusText;const { status, url } = response;notification.error({message: `请求错误 ${status}: ${url}`,description: errorText,});}if (!response) {notification.error({description: '您的网络发生异常,无法连接服务器',message: '网络异常',});}throw error;};
3.代码的主要逻辑就是在请求前进行拦截,判断在header中是否有Authorization,如果没有且未过期,按照jwt格式Bearer+token方式设置headers[‘Authorization’]=Bearer+token。
4.请求前拦截:requestInterceptors及响应后拦截:responseInterceptors参见antd pro v5官网文档
https://pro.ant.design/zh-CN/docs/request/
