Zak*_*ngh 10 amazon-web-services amazon-dynamodb aws-appsync
架构:
type User {
id: ID!
createdCurricula: [Curriculum]
}
type Curriculum {
id: ID!
title: String!
creator: User!
}
Run Code Online (Sandbox Code Playgroud)
查询给定用户的所有课程的解析器:
{
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
## Provide a query expression. **
"expression": "userId = :userId",
"expressionValues" : {
":userId" : {
"S" : "${context.source.id}"
}
}
},
"index": "userIdIndex",
"limit": #if(${context.arguments.limit}) ${context.arguments.limit} #else 20 #end,
"nextToken": #if(${context.arguments.nextToken}) "${context.arguments.nextToken}" #else null #end
}
Run Code Online (Sandbox Code Playgroud)
响应图:
{
"items": $util.toJson($context.result.items),
"nextToken": #if(${context.result.nextToken}) "${context.result.nextToken}" #else null #end
}
Run Code Online (Sandbox Code Playgroud)
查询:
query {
getUser(id: "0b6af629-6009-4f4d-a52f-67aef7b42f43") {
id
createdCurricula {
title
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
{
"data": {
"getUser": {
"id": "0b6af629-6009-4f4d-a52f-67aef7b42f43",
"createdCurricula": null
}
},
"errors": [
{
"path": [
"getUser",
"createdCurricula"
],
"locations": null,
"message": "Can't resolve value (/getUser/createdCurricula) : type mismatch error, expected type LIST"
}
]
}
Run Code Online (Sandbox Code Playgroud)
CurriculumTable 有一个名为 userIdIndex 的全局二级索引,它以 userId 作为分区键。
如果我将响应映射更改为:
$util.toJson($context.result.items)
Run Code Online (Sandbox Code Playgroud)
输出如下:
{
"data": {
"getUser": {
"id": "0b6af629-6009-4f4d-a52f-67aef7b42f43",
"createdCurricula": null
}
},
"errors": [
{
"path": [
"getUser",
"createdCurricula"
],
"errorType": "MappingTemplate",
"locations": [
{
"line": 4,
"column": 5
}
],
"message": "Unable to convert \n{\n [{\"id\":\"87897987\",\"title\":\"Test Curriculum\",\"userId\":\"0b6af629-6009-4f4d-a52f-67aef7b42f43\"}],\n} to class java.lang.Object."
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我使用该字符串并通过前端应用程序中的 console.log 运行它,我会得到:
{
[{"id":"2","userId":"0b6af629-6009-4f4d-a52f-67aef7b42f43"},{"id":"1","userId":"0b6af629-6009-4f4d-a52f-67aef7b42f43"}]
}
Run Code Online (Sandbox Code Playgroud)
那显然是一个对象。我如何使它...不是对象,以便 AppSync 将其正确读取为列表?
解决方案
我的响应图周围有一组花括号。我很确定它是由亚马逊放置在发电机中的。删除它们修复了它。
小智 0
异常消息表明它需要一个类型列表。
看着:
{
[{"id":"2","userId":"0b6af629-6009-4f4d-a52f-67aef7b42f43"},{"id":"1","userId":"0b6af629-6009-4f4d-a52f-67aef7b42f43"}]
}
我没有看到那createdCurricula是一个列表。
目前 DDB 中的内容是:
"id": "0b6af629-6009-4f4d-a52f-67aef7b42f43",
"createdCurricula": null
| 归档时间: |
|
| 查看次数: |
6136 次 |
| 最近记录: |