06.10.2023 в 12:59
Иван Белов
Как остановить выполнение кода после ответа 401 в Axios
Давайте углубимся в то, как работает перехватчик Axios и как обеспечить остановку выполнения кода после ответа 401.
- 1. Обзор перехватчика Axios: Перехватчики Axios — это функции, которые Axios позволяет вам определять глобально для всех запросов или ответов. Эти функции можно использовать для изменения запросов или ответов, обработки ошибок или выполнения других задач до или после выполнения HTTP-запроса.
- 2. Проблема: В вашем случае вы хотите перенаправить пользователя на страницу входа при получении ответа 401 (несанкционировано). Однако вы также хотите убедиться, что после перенаправления дальнейший код не выполняется.
- 3. Остановка выполнения: В JavaScript промисы используются для обработки асинхронных операций, таких как HTTP-запросы. Когда обещание отклоняется, оно обычно перемещается в ближайший блок
catch
для обработки ошибки. Однако если вы хотите полностью остановить выполнение, вы можете создать исключение внутри блокаcatch
. - 4. Решение с объяснением: В перехватчике Axios, когда вы используете
return Promise.reject('Unauthorized');
, вы по сути генерируете исключение с сообщениемUnauthorized
. Это останавливает цепочку обещаний и гарантирует, что все последующие блоки.then()
будут пропущены. В вашем случае это важно, поскольку вы не хотите дальнейшего выполнения кода после перенаправления.
Вот поток:
- Перехватчик Axios обнаруживает ответ 401.
- Он перенаправляет пользователя на страницу входа с помощью
router.push('/login')
. - Сразу после этого он выдает исключение, возвращая
Promise.reject('Unauthorized');
. - Цепочка обещаний останавливается, и любой код, который должен был выполняться после запроса Axios (например, дополнительные блоки
.then()
), не будет выполнен. - 5. Обработка исключения: В вашем приложении должны быть предусмотрены механизмы обработки ошибок, позволяющие перехватывать такие исключения, как «Неавторизованные», и обрабатывать их соответствующим образом. Например, вы можете захотеть показать пользователю сообщение об ошибке, если что-то пойдет не так в процессе перенаправления.
Вот более подробный пример кода, показывающий, как можно обработать исключение:
axios.interceptors.response.use(
(response) => {
return response;
},
(error) => {
if (error.response && error.response.status === 401) {
// Use router.push() to navigate to the login screen
router.push('/login'); // Adjust the route as needed
// Throw an exception to stop further execution
return Promise.reject('Unauthorized');
}
// Handle other errors here
return Promise.reject(error);
}
);
// Example usage of the Axios request:
axios.get('/api/some-data')
.then((response) => {
// Handle a successful response
console.log('Data received:', response.data);
})
.catch((error) => {
if (error === 'Unauthorized') {
// Handle the unauthorized error (e.g., show an error message)
console.log('Unauthorized. Please log in.');
} else {
// Handle other errors here
console.error('An error occurred:', error);
}
});
При таком подходе вы получаете детальный контроль над тем, как обрабатывать различные типы ошибок, включая «Несанкционированную» ошибку, вызванную перехватчиком.