05拦截器

拦截器

在请求或响应在被then和catch处理之前拦截它们
添加请求拦截器:

axios.interceptors.request.use(function (config) {
    //在发送请求之前做什么
    return config
},function (error){
    //对请求错误做些什么
    return Promise.reject(error)
})

添加响应拦截器:

axios.interceptors.request.use(function (response){
    //2xx范围内的状态玛都会触发这个函数
    //对相应数据做些什么
    return response
}, function (error) {
    //超出2xx范围的状态码都会触发这个函数
    //对相应错误做些什么
    return return Promise.reject(error)
})

移除拦截器:

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

自己定义的axios实例也可以添加拦截器:

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

错误处理

axios.get('/user/12345')
   .catch(function (error) {
       if(error.response) {
           //请求成功且得到响应,但是状态码不是2xx
           ....
       } else if(error.request){
           //请求成功,没得到响应
           //`error.request` 在浏览器中是 XMLHttpRequest 的实例
           ....
       }else {
           //请求的发送出问题了
           console.log(error.message)
       }
   })

默认是超出2xx范围就错误,但是使用使用 validateStatus 配置选项,可以自定义抛出错误的 HTTP code。

axios.get('/api',{
    //注意要把status作为参数传进去
    validateStatus: function (status) {
        return status < 500
    }
})

可以对error对象进行toJSON获取更多错误信息:

axios.get('/user/12345')
  .catch(function (error) {
    console.log(error.toJSON());
  });
posted @ 2021-12-30 17:21  太空人CW  阅读(44)  评论(0)    收藏  举报