Обработка 401 по оси при использовании как перехватчиков, так и transformResponse - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть метод для получения данных с сервера, в основном просто еще один запрос GET.Однако я использую transformResponse для того, чтобы изменить данные в соответствии с моими потребностями.

Также у меня есть перехватчик для обработки 401 сообщений об ошибках.

Дело в том, что когда сервер отправляет 401 ответ на мойGET запрос, 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.

Как справиться с этим делом?

...