Вызов Vuex axios не может обработать 422 ответа

#javascript #vue.js #axios #vuex

#javascript #vue.js #axios #vuex

Вопрос:

Я пытаюсь обработать 422 ответа от моего API на случай, если данные неверны при выполнении асинхронного вызова Axios.

В компоненте у меня есть такой метод, как:

 async saveChanges() {
  this.isSaving = true;

  await this.$store.dispatch('updateSettings', this.formData);

  this.isSaving = false;
}
 

И в моих действиях, подобных этому:

 let response;
try {
  response = await axios.put('/api/settings', settings);
  console.log(response);
} catch (e) {
  console.log('error');
  console.log(e);
}
 

Если запрос выполнен успешно, все работает нормально, и я получаю ответ. Однако, если код состояния ответа равен 422, он не завершается ошибкой или не генерирует исключение, и ответ пуст. Я пробовал .then(()).catch(()) , но тоже безуспешно, так как мне нужно, чтобы он был асинхронным.

Любые предложения, что я могу делать неправильно?

Ответ №1:

По умолчанию Axios выдает ошибку только для кодов состояния HTTP между 200 и 300.

Либо настройте Axios также для 422, установив validateStatus :

 axios.put('/api/settings', settings, {
  validateStatus: status => status >= 200 amp;amp; status < 300 || status === 422
})
 

Или проверьте код состояния в вашем обычном обратном вызове:

 response = await axios.put('/api/settings', settings);
if (response.status === 422) {
  // throw error
}