处理Axios OPTIONS响应中的状态(例如503)

时间:2017-10-19 12:16:33

标签: javascript http vue.js http-headers axios

edit2:https://stackoverflow.com/a/37784969/107282表示我不必担心,因为在真实设备上它不会发生。

我在VueJS混合(Cordova)应用中使用Axios并且正在调用API。

Axios(正确地)进行预检'我OPTIONS / GET请求之前的POST请求,但如果API在那个点返回503,我的错误处理代码就没有了#39} ;被叫。



HTTP.post(url, data, {headers: {Authorization: 'Bearer ' + token.getAccessToken()}})
  .then(response => response)
  .catch(error => {
    // Not reached
  });




如何捕获此错误状态?

修改:来自chrome dev工具的屏幕截图:

503 on OPTIONS request

3 个答案:

答案 0 :(得分:4)

我能够重现这个问题以及我能找到的最简单的解决方法,如下所示

axios.interceptors.response.use(null, (error) => {
    return Promise.reject(error);
});

正如您在我的测试中所看到的,我能够获得错误并针对不同场景做出响应

Network error

答案 1 :(得分:1)

Axios的Network Error缺乏描述性。为了以更好的方式将其重新抛出,我们可以执行类似的操作,以至少描述哪个请求收到了错误以及发生了什么:

instance.interceptors.response.use(null, error => {
  if (error && error.message === 'Network Error') {
    throw new Error(`Potential network CORS preflight error at ${error.config.url}`);
  }
  throw error;
});

答案 2 :(得分:0)

谁想知道axios拦截器的响应是什么类型的http状态

    axios.interceptors.response.use(function (res) {
        return res;
      },
      (err) => {
        if(err.response.status == 403 || err.response.status == 503) {
            //handle error of type
            obj[err.response.status] ? obj[err.response.status]() : obj["default"]();
        }
        return Promise.reject(err);
      });

您可以制作带有状态回调功能的地图,以用于不同的行为。

const obj = {
    503 : () => console.log("Forbidden"),
    417 : () => console.log("is a teepot"),
    'default': () => console.log("Not handle it")
}