amazon-web-services - Aws Appsync $util.error:数据和 errorInfo 始终为空
问题描述
我正在使用 AWS AppSync。当请求失败时,我正在尝试使用解析器的响应映射模板中的$util.error()
帮助器(在此处记录)输出一些错误详细信息。无论我做什么,我都无法让 AppSync 输出输出中的data
和errorInfo
字段error
。
这是我拥有的 Lambda。
exports.handler = (event, context, callback) => {
callback(null, {
data: {
name: "Test",
},
errorMessage: "Some error Message",
errorType: "SomeErrorType",
errors: {
"foo": "bar",
"bazz": "buzz",
}
})
};
如您所见,这非常简单。我只是返回一个带有data
、errors
和属性errorMessage
的对象。errorType
这是我的响应映射模板
$utils.error($context.result.errorMessage, $context.result.errorType, $context.result.data, $context.result.errors)
再一次,非常直截了当。我只是使用来自 Lambda 的字段直接抛出错误。
但是当我执行查询时,我得到了这个:
{
"data": {
"myField": null
},
"errors": [
{
"path": [
"myField"
],
"data": null,
"errorType": "SomeErrorType",
"errorInfo": null,
"locations": [
{
"line": 2,
"column": 3,
"sourceName": null
}
],
"message": "Some error Message"
}
]
}
如您所见,errorType
andmessage
字段被正确填充,但 and 字段不errorInfo
正确data
。
我错过了什么吗?为什么这不起作用?
我还尝试$util.error
对模板中的参数进行硬编码。我得到了同样的结果...
解决方案
正如文档所述,Note: data will be filtered based on the query selection set
. 因此,您需要返回与选择集匹配的数据。
所以,对于一个看起来像这样的基本模式:
type Post {
id: ID!
title: String!
}
type Query {
simpleQuery: Post
}
schema {
query: Query
}
和一个查询:
query {
simpleQuery {
title // Note this selection set
}
}
还有一个响应映射模板:
$utils.error($context.result.errorMessage, $context.result.errorType, $context.result.data, $context.result.errors)
使用 Lambda 代码:
exports.handler = (event, context, callback) => {
callback(null, {
data: {
title: "Test", // The same selection set
},
errorMessage: "Some error Message",
errorType: "SomeErrorType",
errors: {
"foo": "bar",
"bazz": "buzz",
}
})
};
它将返回:
{
"data": {
"badOne": null
},
"errors": [
{
"path": [
"badOne"
],
"data": {
"title": "Test"
},
"errorType": "SomeErrorType",
"errorInfo": null,
"locations": [
{
"line": 8,
"column": 3,
"sourceName": null
}
],
"message": "Some error Message"
}
]
}
推荐阅读
- java - 在 TextView 中设置文本取决于 AutoCompleteTextView 中的选定项
- python - 氢燃料汽车加注模型优化
- macos - 'make clean' 后仍然无法重新制作,'make: Nothing to be done for' 提出,MacOS
- kotlin - Kotlin DSL 中的中缀函数在父上下文中没有 this 关键字时不起作用
- reactjs - React TypeScript 接受 ComponentType 道具上缺少的道具
- flutter - 某些表情符号无法正确呈现颤动的文本字段
- docker - Docker-in-Docker 客户端 - 信任附加根证书
- python - Django 管理面板搜索栏不起作用(相关字段查找无效:icontains)
- python - 在 Pydantic 中定义递归模型?
- blazor - 是否可以为 Blazor 页面添加书签?