Home
Sign Up
Sign In
Ng8023's recent timeline updates
Ng8023
V2EX member #636095, joined on 2023-06-27 16:40:12 +08:00
Ng8023
提问
技术话题
好玩
工作信息
交易信息
城市相关
vue3 项目 bit 和 yarn 混用, yarn 安装导致依赖丢失
程序员
•
Ng8023
•
Jul 8, 2023
»
More topics by Ng8023
Ng8023's recent replies
Jul 12, 2023
Replied to a topic by
bhbhxy
›
Vue.js
›
axios 重发请求后数据如何重新渲染
个人经验给出以下方案:
----
1. 401 可以让后端包装在 200 状态内部(后端无论如何总是返回类似这样的结构), 这样就不会走到 onRejected 里面
{code:number, message?:string, data?:any}
^^--- 401 可以在这里返回
2. 拦截到 code===401 不着急返回, 根据业务处理进行处理:
a. 发广播到登录(授权)组件重新授权(假定为异步)
b. 拿到新的授权码(token), 重新发起本次请求(AxiosResponse<T>里面能获取到请求参数)
c. 注意: 要处理无限递归授权问题, 可以给定重试次数限制
----
伪代码:
service.interceptors.response.use(
(resp: AxiosResponse<vo.R>) => {
const r = resp.data;
if (r.code === 401) {
// 检测重试上限
if (++retryTimes >= MAX_RETRY_TIMES) {
return Promise.reject("授权失败");
}
// 重新获取授权码
// 拿到授权码并保存到状态管理
await reqAuth();
// 用新授权重试
return axios(resp.config);
}
// 其他逻辑
// 业务层只处理: {code:number, data?:any, message?:string} 结构
return r;
},
(err: AxiosError) => {
// 处理错误
}
)
»
More replies by Ng8023
About
·
Help
·
Advertise
·
Blog
·
API
·
FAQ
·
Solana
·
903 Online
Highest 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms ·
UTC 20:44
·
PVG 04:44
·
LAX 13:44
·
JFK 16:44
♥ Do have faith in what you're doing.
❯