axios响应拦截器无法处理过期的refresh_token(401)

时间:2018-11-17 11:05:58

标签: reactjs axios interceptor

在ComponentDidMount()的App.js中,我的axios响应上具有以下拦截器,并且它不适用于所有axios请求。

    axios.interceptors.response.use(function (response) {

        if (response)
            return response;
    }, function (error) {

        if (error.response && 401 == error.response.status) {
            console.log('401')
            return Promise.reject(error);
        }
        else {
            return Promise.reject(error);
        }
    });

当我调用API并收到401错误时,此代码对我不起作用。 我在其他组件中使用了此代码,但无法处理401错误

  axios
  .get("/web-api/home/", { headers: headers })
  .then(response => {
    this.setState({
      homeconfig: response.data
    });
  })
  .catch((response) => {
    console.log(response);
  });

1 个答案:

答案 0 :(得分:1)

您已将axios拦截器集放置在ComponentDidMount中。在此配置之前,子组件可能正在调用请求。 (尤其是如果您正在子组件的构造函数中调用请求)。因此,您应该在安装任何组件之前进行此配置。将您的配置放入componentWillMount或构造函数中(我更喜欢构造函数,因为在新版本的react-17中将不推荐使用componentWillMount)。