AppSync Resolver 仅在我对输入进行硬编码时才起作用。 context.arguments 无效
AppSync Resolver only works when I hard code the input. context.arguments does not work
为清楚起见编辑:没有错误消息,如果输入字符串来自 context.arguments,它只是 returns 一个空列表,表明它根本没有获取输入变量在查询测试器上(当然,设置不正确会带来著名的打字错误)。我也将其制作成具有完全相同结果的管道。环顾四周,人们建议制作一个中间对象,但我肯定只是以某种方式弄错了我的输入变量。
我正在 AWS Appsync 中使用 DynamoDB 开发一个项目,我 运行 遇到了 context.arguments 输入问题。
基本上,如果我将图书 ID 的字符串硬编码到查询中(完整的上下文),代码都可以正常工作,但是如果我使用 context.arguments,它只是拒绝正常工作,返回一个空的"spines".
数组
我的架构中有以下类型:
type Book {
id: ID!
title: String
spines: [Spine]
}
type Spine {
id: ID!
name: String
bookId: ID!
}
我使用以下查询:
type Query {
getBook(id: ID!): Book
query getBook($bookId: ID!){
getBook(id: $bookId){
title
id
spines {
name
bookId
}
}
}
使用以下输入(假设这是一个相关的 guid):
{
"bookId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}
这个 spine 对象的解析器:
{
"version" : "2017-02-28",
"operation" : "Query",
"index" : "bookId-index",
"query" : {
"expression": "#bookId = :bookId",
"expressionNames" : {
"#bookId" : "bookId"
},
"expressionValues" : {
":bookId" : { "S" : "${context.arguments.id}" }
}
}
}
}
我确保我的数据集也包含误报(其他书籍的书脊),以便我知道我的查询何时返回正确的数据。
如果我将 guid 硬编码为字符串而不是使用 context.arguments,这将有效,并且得到我正在寻找的每本书 guid。
例如,用这个替换表达式值非常有效:
"expressionValues" : {
":bookId" : { "S" : "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" }
}
为什么“${context.arguments.id}”在这里获取输入变量的方式与其他查询中的方式不同?
感谢@IonutTrestian 为我指明了正确的方向。
$ctx.args
是空的,但我决定上链查看整个上下文中的内容,所以 $util.error($util.toJson($ctx))
.
我发现的 json 对象包含一个名为 "Source" 的小对象,其中包含 Book 对象的查询 return。
长话短说,$ctx.source.id
应用于我的查询时很有魅力。
我还了解更多有关调试 DynamoDB 解析器的知识,以防将来遇到此类问题。非常感谢!
为清楚起见编辑:没有错误消息,如果输入字符串来自 context.arguments,它只是 returns 一个空列表,表明它根本没有获取输入变量在查询测试器上(当然,设置不正确会带来著名的打字错误)。我也将其制作成具有完全相同结果的管道。环顾四周,人们建议制作一个中间对象,但我肯定只是以某种方式弄错了我的输入变量。
我正在 AWS Appsync 中使用 DynamoDB 开发一个项目,我 运行 遇到了 context.arguments 输入问题。
基本上,如果我将图书 ID 的字符串硬编码到查询中(完整的上下文),代码都可以正常工作,但是如果我使用 context.arguments,它只是拒绝正常工作,返回一个空的"spines".
数组我的架构中有以下类型:
type Book {
id: ID!
title: String
spines: [Spine]
}
type Spine {
id: ID!
name: String
bookId: ID!
}
我使用以下查询:
type Query {
getBook(id: ID!): Book
query getBook($bookId: ID!){
getBook(id: $bookId){
title
id
spines {
name
bookId
}
}
}
使用以下输入(假设这是一个相关的 guid):
{
"bookId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}
这个 spine 对象的解析器:
{
"version" : "2017-02-28",
"operation" : "Query",
"index" : "bookId-index",
"query" : {
"expression": "#bookId = :bookId",
"expressionNames" : {
"#bookId" : "bookId"
},
"expressionValues" : {
":bookId" : { "S" : "${context.arguments.id}" }
}
}
}
}
我确保我的数据集也包含误报(其他书籍的书脊),以便我知道我的查询何时返回正确的数据。
如果我将 guid 硬编码为字符串而不是使用 context.arguments,这将有效,并且得到我正在寻找的每本书 guid。
例如,用这个替换表达式值非常有效:
"expressionValues" : {
":bookId" : { "S" : "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" }
}
为什么“${context.arguments.id}”在这里获取输入变量的方式与其他查询中的方式不同?
感谢@IonutTrestian 为我指明了正确的方向。
$ctx.args
是空的,但我决定上链查看整个上下文中的内容,所以 $util.error($util.toJson($ctx))
.
我发现的 json 对象包含一个名为 "Source" 的小对象,其中包含 Book 对象的查询 return。
长话短说,$ctx.source.id
应用于我的查询时很有魅力。
我还了解更多有关调试 DynamoDB 解析器的知识,以防将来遇到此类问题。非常感谢!