Как обнаружить 401 с помощью axios и остановить ошибку консоли

1

Я пытаюсь использовать 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 требует авторизации, но я не могу ее обработать. Спасибо

Теги:
axios

1 ответ

1

Вы можете добавить перехватчик, который поймает все 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);
 }
);
  • 1
    Отлично! Я знал, что это будет просто. ..
  • 0
    Когда запрос получает ответ 401 , установка перехватчика на экземпляре error.response работает, но error.response остается неопределенным. Это происходит с Axios 0.18 и 0.19. Так что этот метод не работает.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню