12

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

这是代码:

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

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

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

{
    "errors": [
        {
            "field": "title",
            "message": "This field is required"
        }
    ]
}

我想捕捉这些错误以便在前端显示它们,但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)

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

4

3 回答 3

21

事实证明,在后台,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))

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

于 2018-04-11T14:53:56.830 回答
0

我也遇到了类似的问题,它显示了默认错误消息“请求失败,状态码 400”,而不是从 API 返回的消息。

我记录了错误对象,但它没有在其中显示响应属性。但是我们确实有响应属性。我尝试记录 Error.response 并且它确实包含从 API 发送的响应。

于 2020-09-24T05:37:45.057 回答
-1

刚刚通过“取消 API 请求”Amplify docs弄清楚了这一点。

据我所知,这是 API 调用返回的错误对象的内容:

在此处输入图像描述

这是我正在做的只是打印出错误,显然你会在这里做更多的事情,但它是一个好的开始。

async uploadUser(state, payload) {

const promise = API.graphql({
    query: createUser,
    variables: { input: payload },
});

try {
    await promise;
} catch (error) {
    // Print out the actual error given back to us.
    console.log(error.errors[0].message);
    
    // If the error is because the request was cancelled we can confirm here.
    if (API.isCancel(error)) {

        // handle user cancellation logic.
        console.log(error.message);
        
    }
}

希望有帮助

于 2021-05-06T10:34:23.327 回答