Я пытаюсь использовать axios для вызова API и возврата данных.
У меня есть следующий код, который отлично работает
axios.get('http://api/courses')
.catch(function (error) {
if (error.response) {
console.log(error.response.status);
} else {
console.log('Error', error.message);
}
})
.then(response => {
console.log(response.data)
});
Это прекрасно работает, API возвращает 200 и данные, поэтому в консоли я получаю возвращаемые данные.
Однако это не работает
axios.get('http://api/courses')
.catch(function (error) {
if (error.response) {
console.log(error.response.status);
} else {
console.log('Error', error.message);
}
})
.then(response => {
console.log(response.data)
});
В приведенном выше вызове я получаю 401, возвращенный API, я хочу, чтобы иметь возможность обнаружить это и сделать что-то (где я сейчас делаю console.log). Однако в консоли я получаю следующие ошибки:
GET http://api/courses 401 (Unauthorized)
(anonymous) @ spread.js:25
e.exports @ spread.js:25
e.exports @ spread.js:25
Promise.then (async)
r.request @ spread.js:25
r.(anonymous function) @ spread.js:25
(anonymous) @ index.js:20
(anonymous) @ (index):49
(index):58 Uncaught (in promise) TypeError: Cannot read property 'data' of undefined
at axios.get.catch.then.response ((index):58)
at <anonymous>
Есть ли способ захватить 401? По-видимому, обычная практика API требует авторизации, но я не могу ее обработать. Спасибо
Вы можете добавить перехватчик, который поймает все 401 ответа. Таким образом, вы можете запустить перенаправление или какие-либо действия, которые могут вам понадобиться. В этом примере я отправляю действие redux, которое очищает некоторые вещи и выводит форму входа.
const UNAUTHORIZED = 401;
axios.interceptors.response.use(
response => response,
error => {
const {status} = error.response;
if (status === UNAUTHORIZED) {
dispatch(userSignOut());
}
return Promise.reject(error);
}
);
401
, установка перехватчика на экземпляре error.response
работает, но error.response
остается неопределенным. Это происходит с Axios 0.18 и 0.19. Так что этот метод не работает.