DevGang
Авторизоваться

Как остановить выполнение кода после ответа 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);
        }
    });

При таком подходе вы получаете детальный контроль над тем, как обрабатывать различные типы ошибок, включая «Несанкционированную» ошибку, вызванную перехватчиком.

Источник:

#Vue.js
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу