如何为axios配置添加自定义属性?自定义_retry属性始终undefined触发死循环如何解决
需求背景
需要通过axios响应拦截器实现token过期自动刷新功能,为此通过模块声明为AxiosRequestConfig扩展了自定义属性_retry,用于避免刷新逻辑死循环,实现代码如下:
declare module "axios" { export interface AxiosRequestConfig { _retry?: boolean; } } axios.interceptors.response.use( (res) => res, (error: AxiosError) => { const originalRequest = error.config; console.log(originalRequest._retry); // always undefined if (error?.response?.status === 401 && !originalRequest._retry) { originalRequest._retry = true; return axios .post("/auth/refresh-token", {}, { withCredentials: true }) .then((res) => { if (res.status === 201) { return axios(originalRequest); } }) } return Promise.reject(error); } );
问题现象
实际运行时发现originalRequest._retry始终为undefined,反而触发了无限循环。在axios的Github仓库检索过相关issue但未找到解决方案。
补充说明:有网友使用最新版axios测试该代码可正常运行。
核心疑问
如果刷新token的请求本身也返回401错误该如何处理?
最终解决方案
问题已解决,死循环的原因是refresh token过期时,刷新token的接口也返回401,将该场景的响应状态码改为400后功能运行正常。
内容的提问来源于stack exchange,提问作者Arman
相关产品推荐
相关产品推荐

