当前位置: 首页 > 知识库问答 >
问题:

VueJS,Axios,Laravel-捕获错误

董联
2023-03-14

我正在使用以下代码向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 Axios返回401、422或其他东西,会在控制台中抛出一个错误,整个方法将停止运行。

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

如何捕获错误-执行一些操作(并将$this绑定到回调),然后在不终止整个脚本的情况下继续使用该方法?

共有1个答案

叶衡虑
2023-03-14

原因是Axios default具有如下验证程序功能:

 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
}

. cat on axios:

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

注意:这与您的示例不同,因为没有使用异步/等待

错误回调:

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.
};
 类似资料:
  • 我正在使用Laravel version 7构建自己的API,但是当我从vuejs(实际上是quasar)向Laravel发出请求时,我会得到:“从origin”http://127.0.0.1:8080/API/login“访问XMLHttpRequest”已被CORS策略阻止:请求的资源上没有'Access-Control-Allog-Origin'标头“。 为了快速解决这个问题,我尝试添加(

  • 我无法用axios捕捉错误响应。怎么做?我用的是: 我看到ajax请求的结果有400个状态代码,响应主体看起来像(Django后端)。没关系,我已经准备好在catch处理程序中处理这些错误了。 但是它们转到成功处理程序。为何如此?我在控制台中看到以下输出: 成功处理程序接收axios错误对象作为结果。为什么会这样,下一步该怎么办?此错误对象不包含任何有用信息。 UPD。实际上,错误对象包含有用的信

  • 我正在从后端代码发送状态代码422,其中包含错误描述的响应正文。我使用axios post发布请求,如下所示: 问题是,当后端返回错误代码422时,我捕获的错误对象没有关于响应体的信息。有什么方法可以检索错误文本吗?

  • 嗨,我正在为后端使用Laravel API,并在React中使用Redux进行登录。嗯,我调用API,我希望laravel API传递正在发生的事情的精确错误,例如用户不存在。问题是当我想在使用axios进行的调用的catch部分访问Mesage时 Laravel登录部分 使用axios响应调用 我在网络控制台中得到的响应 xhr.js:177邮政http://127.0.0.1:8000/api

  • 我正试图将一些表单数据发送到后端,但Laravel验证不会返回422状态的错误。 公理 简单的axios将请求发送到URL,并希望在请求周期中发现错误时返回响应。 Laravel 我已经设置了Laravel验证来验证一些表单输入,如果验证失败,则返回422。 回答 给出了一个响应,但当我试图对其进行控制台时,控制台中没有定义: 我在这里遇到过这个问题https://github.com/axios

  • 问题内容: 可以使用try catch块捕获TokenMismatchException吗?我希望它不显示显示“ VerifyCsrfToken.php第46行中的TokenMismatchException …”的调试页面,而是希望它显示实际页面并仅显示错误消息。 我对CSRF没问题,我只希望它仍然显示页面而不是调试页面。 复制(使用Firefox):步骤: 打开页面(http://exampl