我正在使用“ axios”:“ ^ 0.18.0”
我正在拦截请求和响应,并在拦截请求时添加令牌。
当我使用请求拦截器,然后在响应拦截器中,如果出现[400,...]错误,则我的“ error.response.data ”未定义,并且我无法访问异常类型和消息来翻译它们
当我删除请求拦截器时,它可以正常工作,但是我需要请求拦截器来添加令牌
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的工作方式
这是使用请求拦截器后的样子
问题是在标题中添加“ Bearer null”。
const token = store.getState().tokenReducer.access_token;
if (token != null) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
删除if语句解决了问题。错误的标题给我错误的错误代码