Перехватывайте и обрабатывайте ошибки ajax глобально при использовании Axios
с Vue
.
npm install vue-axios-interceptors --save
// or
yarn add vue-axios-interceptors
// Make sure you import this package after you've imported Vue:
window . Vue = require ( 'vue' ) ;
require ( 'vue-axios-interceptors' ) ;
// Make sure the axios package is available globally on the window object:
window . axios = require ( 'axios' ) ;
Пакет регистрирует новую глобальную шину событий, называемую intercepted
в объекте window
и генерирует на ней несколько событий, когда вызов ajax приводит к ошибке. Вы можете легко прослушивать эти события, чтобы построить плавный рабочий процесс обработки ошибок, например, в глобальном компоненте, отвечающем за отображение сообщений об ошибках:
// ErrorMessages.vue
mounted ( ) {
window . intercepted . $on ( 'response' , data => {
console . log ( data ) ; // { status: 404, code: 'Not found', body: null }
// Display the message.
} ) ;
}
Вы также можете прослушивать определенные коды состояния и категории ответов, например, если вы хотите обрабатывать ответы 4xx иначе, чем ответы 5xx:
// Listen for any intercepted responses.
window . intercepted . $on ( 'response' , data => {
//
} ) ;
// Listen for any intercepted responses under the Client Error category (4xx).
window . intercepted . $on ( 'response:client-error' , data => {
//
} ) ;
// Listen for any intercepted responses under the Server Error category (5xx).
window . intercepted . $on ( 'response:5xx' , data => {
//
} ) ;
// Listen for a specific status.
window . intercepted . $on ( 'response:404' , data => {
//
} ) ;
// Listen for a specific HTTP code.
window . intercepted . $on ( 'response:unprocessable-entity' , data => {
//
} ) ;
Полный список кодов состояния можно найти на странице https://httpstatuses.com/.
Если вы используете Laravel >=5.5 в качестве бэкэнда, вам повезло. Если ваш сервер возвращает ответ 422
(обычно ошибка проверки), пакет автоматически анализирует возвращенные ошибки в повторяемый объект «ключ-значение», к которому вы можете получить доступ через data.body
. Это намного проще использовать для отображения всех сообщений или ссылки на ошибку одного поля, чем исходную структуру сообщения об ошибке.