搜索
您的当前位置:首页正文

axios中设置拦截(interceptors.response)error.respon。。。

来源:尚佳旅游分享网
axios中设置拦截(interceptors.response)error.respon。。。

axios.interceptors.response.use(response => Promise.resolve(response), error => { // 这⾥对 error 预期结果是包含具体错误信息和状态码 if (error && error.response && error.response.status) { switch (error.response.status) { case 500:

// do something... break case 404:

// do something... break default:

// do something... break } } })

事与愿违,当服务器发⽣错误时, error 提供的信息永远只有:'Error: Network Error'

跟源码进去,然后发现开发者在注释⾥清楚的解释了为什么,翻译总结就是:balabala…不是我不给你们错误信息,是 TM 浏览器不给我啊balabala

// Handle low level network errors

request.onerror = function handleError() {

// Real errors are hidden from us by the browser // onerror should only fire if it's a network error

reject(createError('Network Error', config, null, request)); // Clean up request request = null;}

不过好消息是,⾃⼰在业务逻辑⾥定义的错误信息是能够获取到的。

⽴刻验证了下,在请求登录验证⽅法⾥返回结果时,像这样添加发送错误状态码:

res.sendStatus(401)

再回头运⾏代码,发送请求,果然 error 拿到了它该有的信息

{ ...

\"response\": {

\"data\": \"Unauthorized\ \"status\": 401,

\"statusText\": \"Unauthorized\ \"headers\": {

\"content-type\": \"text/plain; charset=utf-8\" } }}

仔细思考了⼀下,其实客户端本来就不需要关⼼底层错误。需要处理展⽰给⽤户的只有业务逻辑内发⽣的错误提⽰,譬如登录验证失败、数据编辑操作失败等等。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top