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

时间:2020-05-01 04:20:59

标签: amazon-web-services graphql aws-amplify aws-appsync

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

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

如何在AWS Amplify graphql中指定字段应为identity字段?在此AWS amplify workshop中为id: ID!字段指定identity似乎很好。

〜\ 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 个答案:

答案 0 :(得分:0)

您必须在id参数中提供input

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

该错误有点难以理解,但其中包含解密所需的所有信息:

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

(我在这里详细介绍了一些细节。为了从技术上纠正,错误是由于 resolver 无法序列化响应对象,而不是解释输入对象。但是如果您提供输入对象中的必填字段,其余字段应正常工作。)