Graphql Aws AppSync查询在使用解析程序时出错
我是AWS AppSync的新手,但是它很容易学习和理解 我正在尝试创建一个解析器,当用户运行Graphql Aws AppSync查询在使用解析程序时出错,graphql,aws-appsync,Graphql,Aws Appsync,我是AWS AppSync的新手,但是它很容易学习和理解 我正在尝试创建一个解析器,当用户运行getChore(id:)时,它将返回所有的chore信息。如果它成功地做到了这一点,问题就出在杂务中有两个字段:createdBy&assignedTo链接到用户类型 type Chore { id: ID! title: String desc: String status: String reward: Float retryDeduction: F
getChore(id:)
时,它将返回所有的chore信息。如果它成功地做到了这一点,问题就出在杂务中有两个字段:createdBy&assignedTo
链接到用户
类型
type Chore {
id: ID!
title: String
desc: String
status: String
reward: Float
retryDeduction: Float
required: Boolean
createdDate: AWSDateTime
date: AWSDateTime
interval: String
assignedTo: User
createdBy: User
}
type User {
id: ID!
age: Int
f_name: String
l_name: String
type: Int
admin: Boolean
family: Family
}
在aws appsync中,尝试将解析程序附加到assignedTo:User
和createdBy:User
,因此我的查询如下所示:
query getChore {
getChore(id: "36d597c8-2c7e-4f63-93ee-38e5aa8f1d5b") {
id
...
...
assignedTo {
id
f_name
l_name
}
createdBy {
id
f_name
l_name
}
}
}
但是,当我发出此查询时,我得到一个错误:
提供的键元素与架构不匹配(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;
我已经研究过了,似乎找不到正确的解决方法
im使用的解析器是:
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
}
}
返回:
$util.toJson($ctx.result)
当您收到
提供的key元素与架构不匹配的错误时,这是因为您的请求映射模板key
与DynamoDB中的主键不匹配。您可以在应用程序设置中启用CloudWatch日志,以准确查看发送到DynamoDB的内容
如果您能回答与您的应用程序相关的问题,我无法知道您的模板有什么问题,因为您的示例缺少一些信息:
-用户存储在哪里?他们存储在自己的DDB表中,与琐事分开吗?用户表id
上的散列键也是这样吗?
-在杂务
表中,您如何知道您的杂务是分配给
还是由
创建的?杂务DDB项上是否存储了用户id?
-您发布的请求映射模板是否与附加到Chore.assignedTo
的解析程序相对应?如果是,使用$ctx.args.id
将实际基于Chore id而不是分配给它的用户执行GetItem
最后,我复制了你的应用程序,我能够使它工作与一些变化
先决条件:
- 我有一个
chores
和一个users
DynamoDB表,两者都有id
作为散列键。这两个表在AppSync中映射为数据源
- 我在家务表中有一个家务看起来像
和用户表中的两个用户:
{
"f_name": "Alice",
"id": "2",
"l_name": "Wonderland"
}
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.source.createdBy),
}
}
及
- 我使用了您的GraphQL模式
解析器
指向chores
表的Query.getchores上的解析器:
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
}
}
指向用户表的Chore.assignedTo
上的解析器(注意$ctx.source.assignedTo
而不是$ctx.args
)
类似地,Chore.createdBy上的解析器指向用户表:
{
"f_name": "Alice",
"id": "2",
"l_name": "Wonderland"
}
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.source.createdBy),
}
}
所有解析程序响应映射模板都使用传递
运行查询
最后,在运行查询时:
query getChore {
getChore(id: "36d597c8-2c7e-4f63-93ee-38e5aa8f1d5b") {
id
assignedTo {
id
f_name
l_name
}
createdBy {
id
f_name
l_name
}
}
}
我得到以下结果:
{
"data": {
"getChore": {
"id": "36d597c8-2c7e-4f63-93ee-38e5aa8f1d5b",
"assignedTo": {
"id": "1",
"f_name": "John",
"l_name": "McCain"
},
"createdBy": {
"id": "2",
"f_name": "Alice",
"l_name": "Wonderland"
}
}
}
}
希望有帮助
{
"data": {
"getChore": {
"id": "36d597c8-2c7e-4f63-93ee-38e5aa8f1d5b",
"assignedTo": {
"id": "1",
"f_name": "John",
"l_name": "McCain"
},
"createdBy": {
"id": "2",
"f_name": "Alice",
"l_name": "Wonderland"
}
}
}
}