如何使用 aws-amplify 处理 api 错误?
How to handle api errors using aws-amplify?
我目前正在尝试 POST 使用 aws-amplify
反应库将数据发送到由 aws api-gateway 触发的 aws lambda 函数。
这是代码:
API.post("snippets","snippets/", {
body: data,
}).then(response => response).catch(console.log(err))
主体情况下,一切正常
但是我的 lambda 函数旨在验证输入数据和 return 状态代码 400
,returned 有效负载看起来像这样:
{
"errors": [
{
"field": "title",
"message": "This field is required"
}
]
}
我想捕获这些错误以便在前端显示它们,但 aws-amplify
似乎有未记录的行为。
默认情况下,状态代码 400
returned 会抛出默认错误消息:
Error: Request failed with status code 400
at createError (createError.js:16)
at settle (settle.js:18)
at XMLHttpRequest.handleLoad (xhr.js:77)
有没有办法获取 returned 有效负载而不是这个神奇的错误?
事实证明,在幕后,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
我也遇到了类似的问题,它显示默认错误消息“请求失败,状态代码 400”,而不是从 API 返回的消息。
我记录了错误对象,但其中没有显示响应属性。但是我们确实有响应属性。我尝试记录 Error.response,它确实包含从 API.
发送的响应
刚刚通过 'Cancel API requests' 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);
}
}
希望对您有所帮助
我目前正在尝试 POST 使用 aws-amplify
反应库将数据发送到由 aws api-gateway 触发的 aws lambda 函数。
这是代码:
API.post("snippets","snippets/", {
body: data,
}).then(response => response).catch(console.log(err))
主体情况下,一切正常
但是我的 lambda 函数旨在验证输入数据和 return 状态代码 400
,returned 有效负载看起来像这样:
{
"errors": [
{
"field": "title",
"message": "This field is required"
}
]
}
我想捕获这些错误以便在前端显示它们,但 aws-amplify
似乎有未记录的行为。
默认情况下,状态代码 400
returned 会抛出默认错误消息:
Error: Request failed with status code 400
at createError (createError.js:16)
at settle (settle.js:18)
at XMLHttpRequest.handleLoad (xhr.js:77)
有没有办法获取 returned 有效负载而不是这个神奇的错误?
事实证明,在幕后,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
我也遇到了类似的问题,它显示默认错误消息“请求失败,状态代码 400”,而不是从 API 返回的消息。
我记录了错误对象,但其中没有显示响应属性。但是我们确实有响应属性。我尝试记录 Error.response,它确实包含从 API.
发送的响应刚刚通过 'Cancel API requests' 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);
}
}
希望对您有所帮助