javascript - Vuex axios 调用无法处理 422 响应

标签 javascript vue.js axios vuex

我正在尝试处理来 self 的 API 的 422 响应,以防在进行异步 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(()),但也没有成功,因为我需要它是异步的。

有什么建议我可能做错了吗?

最佳答案

默认情况下,Axios 仅针对 200 到 300 之间的 HTTP 状态码抛出错误。

通过设置 validateStatus 将 Axios 配置为也抛出 422 :

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

或者检查你正常回调中的状态码:

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

关于javascript - Vuex axios 调用无法处理 422 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66285356/

相关文章:

javascript - 在 ExtJS6 中创建电子邮件字段组件

javascript - 尝试从有效的 LatLng 对象创建 LatLngBounds 对象时出错

javascript - 使用 vue 作为前端从后端 laravel 下载文件

javascript - ReactJS 与 axios “Cannot read property ' 未定义的映射'”

javascript - 回顾我的代码 React 中的函数式编程

javascript - style.display ="none"在 else{} 中有效,但在 if{} 中无效

javascript - 在 Vue.js 中加载图像时显示微调器

javascript - 从 Vue 中的自定义事件获取事件源?

javascript - 如何在模板中将 ref 从父组件传递到子组件

javascript - 如何在 axios 的 .then() 链中访问之前的 promise 响应?