Axios在服务器错误时取不到response

Axios在服务器错误时取不到response

前端代码

axios.request({
	...// 请求config
}).then(
	res => console.log('success',res),
	err => console.log('err',err)
)

如上,这是一个普通的请求,一个请求成功回调,一个请求失败回调,当服务器响应时会打印对应的信息

需求

若后端返回错误码401,前端重新进行登录授权

问题

通常情况下,前端请求后台接口,如果参数不正确或者验证不通过,后端会返回响应码200,然后具体的错误码和错误信息放在response里;但是这次做项目时,后端用了某框架做了封装,遇到验证失败时,response里依然是错误码,错误信息,但是请求的响应码是401,这就导致前端的ajax请求进入error处理回调,为了正常实现上面的判断401进行重登陆需求,讲道理,只要在err的callBack里 判断response.响应码是不是401就行了,所以我测试了一下,在控制台打印错误详情
在这里插入图片描述

好吧,输出的是个Error对象,居然没有response,这可怎么办,没有办法判断响应码怎么实现这个需求呢?
没办法,试了各种方法,拦截器,设置validateStatus,都不能根本解决问题,但是原生xhr随便就可以做的判断,axios怎么可能做不了呢?于是开始探索源码之路…

首先,再看一下控制台的输出在这里插入图片描述
发现栈中,最后是在createError.js中,于是在axios包目录下找到了这个文件
在这里插入图片描述
点进去,查看代码
在这里插入图片描述
通过源码,不难发现,原来在回调中,把response放在error的属性里了,但是error对象在打印时默认是看不到内部属性的,所以才会误以为没有response,结果通过判断err.response判断响应信息就能实现需求了!

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值