如何使用 aws-amplify 处理 api 错误?

Séb*_*all 10 amazon-web-services reactjs amazon-cognito aws-lambda aws-amplify

我目前正在尝试使用aws-amplifyreact lib将数据发布到由 aws api-gateway 触发的 aws lambda 函数。

这是代码:

API.post("snippets","snippets/", {
        body: data,
    }).then(response => response).catch(console.log(err))
Run Code Online (Sandbox Code Playgroud)

在主要情况下,一切正常。

但是我的 lambda 函数旨在验证输入数据并返回一个状态代码400,返回的有效负载如下所示:

{
    "errors": [
        {
            "field": "title",
            "message": "This field is required"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想捕获这些错误以便在前端显示它们,但aws-amplify似乎有一个未记录的行为。

默认情况下,400返回的状态代码会抛出一条默认错误消息:

Error: Request failed with status code 400
    at createError (createError.js:16)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得返回的有效载荷而不是这个神奇的错误?

Séb*_*all 18

事实证明,在幕后,aws-amplify使用 Axios 进行 http 调用。

使用 Axios 时,你必须console.log(error.response)https : //github.com/axios/axios/issues/960

这是我所做的修复:

API.post("snippets","snippets/", {
        body: data,
    }).then(response => response).catch(error => console.log(error.response.data))
Run Code Online (Sandbox Code Playgroud)

aws-amplify文档上的拉取请求已打开:https : //github.com/aws/aws-amplify/pull/633

  • 这对当前版本的放大仍然有效吗?我似乎没有收到 `Error.response` 属性。 (3认同)