同时使用拦截器和transformResponse时在axios中处理401

时间:2018-12-11 15:48:58

标签: javascript axios interceptor

我有一种从服务器获取数据的方法,基本上只是另一个GET请求。但是,我使用transformResponse来修改数据以满足我的需要。

我还有拦截器来处理401错误响应。

问题是,当服务器在我的GET请求上发送401响应时,transformResponse代码将运行并尝试修改服务器响应,这显然不是transformResponse所期望的。这会导致拦截器收到JavaScript错误并且无法获得完整的http响应(error.response返回未定义)的情况。

这是两个代码示例。

从服务器获取数据:

 findOak() {
    console.log('find oak')
    return axios.get(`${baseURL}/`, {
      params: {
        is_oak: true
      },
      transformResponse: (response) => {
        console.log('transformResponse')
        return companyTransformer(response.data[0])
      }
    }).then(response => response.data)
  }

设置拦截器:

axios.interceptors.response.use(
    response => response,
    error => {
      console.log('interceptor')
      console.log(error.response)
      if (error.response && error.response.status === 401 && authenticated()) {
        logout()
        window.location.href = '/'
      } else {
        return Promise.reject(error)
      }
    }
  )

因此error.response是未定义的,而不是服务器响应中包含错误Uncaught (in promise) TypeError: Cannot read property '0' of undefined,它发生在transformResponse中。

如何处理此案?

0 个答案:

没有答案