繁体   English   中英

VueJS、Axios、Laravel - 捕获错误

[英]VueJS, Axios, Laravel - catch errors

我正在使用以下代码向 Laravel 发布内容:

        upload: async function() {     

        response = await axios.post(url, data, {
            headers: {
                'Content-Type': 'multipart/form-data',
            }
        }).catch(function(error) {
            console.log(error.response.data.errors);
        });

(无关代码省略)

当 Laravel 返回 200 时,这总体上有效。如果我从 Laravel 返回 401、422 或其他内容 Axios 在控制台中引发错误并且整个方法停止运行。

我一直认为这是一种对开发人员非常不友好的行为——我不理解吗? 从后端返回不同的状态代码 API 应该有助于读取 Vue 中的响应,但 Vue/Axios 将每个非 200 响应视为致命错误。

我怎样才能捕捉到错误 - 做一些事情(并将$this绑定到回调)然后继续使用该方法而不杀死整个脚本?

原因是 Axios 默认有一个验证器 function 像这样:

 validateStatus: function (status) {
    return status >= 200 && status < 300; // default
 },

状态码 300 及以上且小于 200 将使 axios 抛出。

您可以通过以下任一方式使其不抛出(停止进一步执行):

试着抓:

try {
    response = await axios.post(url, data, {
        headers: {
            'Content-Type': 'multipart/form-data',
        }
    });
} catch (error) {
    this.doSomething() // this is available here
}

.catch 上 axios:

axios.post(url, data, {
    headers: {
        'Content-Type': 'multipart/form-data',
    }
}).catch(error => {
    console.log(error.response.data.errors);
});

注意:由于不使用 async/await,这与您的示例不同

错误回调:

axios.post(url, data, {
    headers: {
        'Content-Type': 'multipart/form-data',
    }
}, error => {
    console.log(error.response.data.errors);
})

如果您不希望 Axios 强制您抛出 300 以上的状态码,您可以更改默认的 axios 验证器:

axios.defaults.validateStatus = (status) => {
    return status === 200; // your own logic here to throw or not.
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM