AWS放大graphql突变:不能为不可为空的字段返回null

Posted

技术标签:

【中文标题】AWS放大graphql突变:不能为不可为空的字段返回null【英文标题】:AWS amplify graphql mutation: Cannot return null for non-nullable field 【发布时间】:2020-08-15 14:31:49 【问题描述】:

我对 GraphQL 和 AWS amplify 都很陌生,所以这可能是一个新手问题。

我在 schema.graphql 中定义了下面列出的类型。如果我使用带有id: ID! 的类型创建一个突变,我会得到一个Cannot return null for non-nullable field Vocabulary.id

如何在 AWS amplify graphql 中指定一个字段应该是 identity 字段?为identity 字段指定id: ID!,在这个AWS amplify workshop 中似乎工作正常。

~\amplify\backend\api\vidaudtranscription\schema.graphql

type Vocabulary @model 
@key(fields:["userId"])
@auth(rules: [allow: owner])

    id: ID!
  userId: String!
  vocabularies: [String!]!

变异请求:

mutation MyMutation 
  createVocabulary(input: userId: "abc", vocabularies: ["123", "456"]) 
    id
    owner
    userId
    vocabularies
  

突变反应:


  "data": 
    "createVocabulary": null
  ,
  "errors": [
    
      "message": "Cannot return null for non-nullable field Vocabulary.id.",
      "locations": [
        
          "line": 5,
          "column": 5
        
      ],
      "path": [
        "createVocabulary",
        "id"
      ]
    
  ]

【问题讨论】:

【参考方案1】:

您必须在 input 参数中提供 id

createVocabulary(input: userId: "abc", vocabularies: ["123", "456"])
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这个错误有点难以阅读,但它包含了你需要破译它的所有信息:

"Cannot return null for non-nullable field Vocabulary.id." 抱怨 Vocabulary.id(在您正在创建的词汇对象中)不能为空,但它是 "path": ["createVocabulary", "id"] 是缺失字段的位置,即createVocabulary 结构中的“id”字段

(我在这里忽略了一些细节。从技术上讲,错误是由于 resolver 未能序列化响应对象,而不是解释输入对象。但如果您提供输入对象中的必填字段,其余的应该可以工作。)

【讨论】:

以上是关于AWS放大graphql突变:不能为不可为空的字段返回null的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 查询返回错误“不能为不可为空的字段返回 null”

使用 Graphql 在 NestJS 上订阅时,“不能为不可为空的字段返回 null”

Schema graphql 错误给出“不能为不可为空的字段 Organisation.id 返回 null”为啥?

Apollo GraphQL“不能为不可为空的字段 Mutation.createUser 返回 null”

Gatsby graphiQL - 不能为不可为空的字段 ImageSharpFluid.src 返回 null

中继/ graphql:可为空的响应或捕获查询错误的方法