gpt4 book ai didi

reactjs - 使用 axios interceptors.request 时,error.response.data 未定义

转载 作者:行者123 更新时间:2023-12-05 06:25:34 33 4
gpt4 key购买 nike

我正在使用“axios”:“^0.18.0”

我正在拦截请求和响应,并且在拦截请求添加 token

当我使用请求拦截器然后在响应拦截器中如果我得到 [400,...] 错误我的“error.response.data”是未定义的并且我不'有权访问异常类型和消息以翻译它们

当我删除请求拦截器时它工作正常但我需要请求拦截器来添加 token

axiosAuthInstance.interceptors.request.use((config)=>{
console.log('Auth req config=>', config.url);
console.log('auth req ',config);

const token = store.getState().tokenReducer.access_token;
console.log(token);
if (token != null || token !== '.') {
config.headers.Authorization = `Bearer ${token}`;
console.log('authed');
}
return config;
},(error)=>{
ToastMaker().withoutAction('Ooops Error in Auth Request Interceptor','warning');
console.log(error);
return Promise.reject(error);
});
//------------------------------------------
axiosAuthInstance.interceptors.response.use((response)=>{
console.log('Auth resp response=>',response);
if (response.data.error) {
console.log('hereeeeeee !!!');
// return Promise.reject(response);
}
return response;
},(error)=>{
switch(error.response.status){
case 400:{
console.log(error.response.data.customExceptionDetailModelList);
error.response.data.customExceptionDetailModelList.forEach((item)=>{console.log(item.message.error)});
ToastMaker().withoutAction(`${error.response.status}` + " "+error.response.data.error_description,'warning');
break;
}

case 401:{
console.log('shafffft');
console.log(error.response.data.customExceptionDetailModelList);
error.response.data.customExceptionDetailModelList.forEach((item)=>{console.log(item.message.error)});
ToastMaker().withoutAction(`${error.response.status}` +" "+error.response.data.error_description,'warning');
break;
}

case 404:{
console.log(error.response.data.customExceptionDetailModelList);
error.response.data.customExceptionDetailModelList.forEach((item)=>{console.log(item.message.error)});
ToastMaker().withoutAction(`${error.response.status}` + " "+error.response.data.error_description,'warning');
break;
}

case 500:{
ToastMaker().withoutAction(`${error.response.status}` +" "+error.response.data.error_description,'warning');
break;
}

default:{
ToastMaker().withoutAction('مشکل ارتباط با سرور','warning');
break;
}
}
console.log(error.response);
return Promise.reject(error);
});

这是没有 request.intercept 的工作方式

http://s8.picofile.com/file/8365319268/data_is_correct.PNG

这是使用请求拦截器后的样子

http://s8.picofile.com/file/8365319342/undefined_data.PNG

最佳答案

根据我的经验,当服务器(由于某些原因)未能响应(例如超时)时,未定义 error.response。因此,您不会收到任何状态代码或错误消息。

我通常会处理这两种情况:

axios.interceptors.response.use(response => {
return response
}, error => {
if (!error.response) {
// Show a generic error Toast (e.g. Server error, please retry)
return
}

const { response: { status } } = error
if (status === 401) {
// Refresh token
}
return Promise.reject(error)
})

关于reactjs - 使用 axios interceptors.request 时,error.response.data 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836750/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com