GraphQL SDL(aws appsync)中的“无法为不可为空的类型返回null:父'消息'(/ getMessages/sendBy)中的'人'”

2 amazon-dynamodb aws-sdk graphql react-native aws-appsync

我是 graphql 的新手。我使用 aws appsync 实现了一个 react-native 应用程序。以下是我在架构中编写的代码

type Messages {
id: ID!
createdAt: String!
updateAt: String!
text: String!
sendBy: Person!
    @relation(name: "UserMessages")}

type Person {
id: ID!
createdAt: String!
updateAt: String!
name: String!
messages: [Messages!]!
    @relation(name: "UserMessages")}
Run Code Online (Sandbox Code Playgroud)

当我尝试查询 sendBy 值时,它给了我一个错误说

  query getMessages{
  getMessages(id : "a0546b5d-1faf-444c-b243-fab5e1f47d2d") {
    id
    text
    sendBy {
      name
    }
  }
}


 {
  "data": {
    "getMessages": null
  },
  "errors": [
    {
      "path": [
        "getMessages",
        "sendBy"
      ],
      "locations": null,
      "message": "Cannot return null for non-nullable type: 'Person' within parent 'Messages' (/getMessages/sendBy)"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我不明白那个错误请帮助我。谢谢!!提前

小智 5

这听起来可能很愚蠢,但是,开发人员仍然会犯这种错误,我也是。在订阅中,客户端只能检索在变异查询中输出的那些字段。例如,如果您的突变查询如下所示:

mutation newMessage { addMessage(input:{ field_1: "", field_2: "", field_n: "", }){ field_1, field_2 } }

在上述突变中,因为我们只输出 field_1 和 field_2。客户端可以检索这些字段的唯一子集。

因此,如果在模式中,对于订阅,如果您已将 field_3 定义为 required(!),并且由于您没有在上述突变中输出 field_3,这将引发错误,提示无法为不可空类型返回 null:field_3。


Sha*_*aju 2

看起来路径 [getMessages, sendBy] 正在解析为一个null值,并且您的架构定义 ( sendBy: Person!) 表示sendBy字段无法解析为 null。请检查解析器是否附加到sendBytype 的字段Messages

如果附加了解析器,请为此 API 启用 CloudWatch 日志(这可以在控制台的“设置”页面上完成,选择“全部”选项)。您应该能够检查路径 [getMessages, 0, sendBy] 的解析请求/响应映射是什么。