У меня есть метод для получения данных с сервера, в основном просто еще один запрос 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.
Как справиться с этим делом?