aws graphql @connection 未按预期返回数组?
Posted
技术标签:
【中文标题】aws graphql @connection 未按预期返回数组?【英文标题】:aws graphql @connection not returning an array as expected? 【发布时间】:2020-07-14 04:20:08 【问题描述】:我有一个graphql模型如下(一个用户可以有很多帖子1:m)
type User @model
id: ID!
fullName: String!
emailAddress: String!
posts: [Post] @connection(name: "UserPostConnection")
type Post @model
id: ID!
text: String!
user: User @connection(name: "UserPostConnection")
createdAt: String
updatedAt: String
我正在尝试返回特定用户的所有帖子,如下所示:
let queryInput = GetUserQuery(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549")
appSyncClient?.fetch(query: queryInput, cachePolicy: .fetchIgnoringCacheData) (result, error) in
print(result?.data?.getUser?.posts)
但是结果不是返回一个数组,而是返回一个可选的:
Optional(AWSStackSocial.GetUserQuery.Data.GetUser.Post(snapshot: ["__typename": Optional("ModelPostConnection"), "nextToken": nil]))
我已经确认 a) 用户存在,并且 b) 帖子也存在。
在 AWS 上:
query
getUser(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549")
id
posts
items
id
输出:
"data":
"getUser":
"id": "879db4f2-1dad-47b9-b70d-8bca15bf2549",
"posts":
"items": [
"id": "04c4b571-6e92-4745-9a40-1a67a9d49d77"
,
"id": "0f44fe6e-4e15-4a8c-b591-555e8fa1f60e"
,
"id": "60c18c40-fea3-4ff3-8b21-df6857703dd2"
]
【问题讨论】:
【参考方案1】:我找到了答案。放大 GraphQL 的默认深度级别为 2,因此需要将其更改为 3。这可以通过更改最大深度来完成:
amplify codegen configure
【讨论】:
【参考方案2】:根据定义,模型中没有所需后缀 (!
) 的任何内容都是可选的,无论它是否存在。您必须防止它成为nil
,因为它被定义为可以是nil
。如果您拥有该模型,则可以将其更改为必需的(我不建议这样做!)。否则,您只需在处理它们时打开包装即可。
guard let user = result?.data?.getUser, let posts = user.posts else throw NoPostsError
【讨论】:
感谢您的回复,即使这样仍然没有给我正确的结果。我期望的是 1:m 的数据返回,就像上面的模型结果,1 个用户,3 个帖子。例如,如果您运行 ListPosts,我期待得到的 Items 结果。结果?.data?.getUser?.posts?.items。有什么想法吗?以上是关于aws graphql @connection 未按预期返回数组?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Amplify 未生成正确的 graphql 输入深度
在 Ionic AWS Starter 模板中使用 Appsync 中的 Graphql 和 AWS Amplify 未捕获的异常 [Object Object]
使用 GraphQL 转换在 AWS AppSync 中生成带有参数的订阅