在 GraphQL 参数化查询中使用 ID

3kt*_*3kt 6 apollo graphql grandstack

我有以下架构:

type Post {
  id: ID!
  text: String
}
Run Code Online (Sandbox Code Playgroud)

我正在使用自动生成的突变neo4j-graphql.js,因此我可以访问以下突变:

UpdatePost(
id: ID!
text: String
): Post
Run Code Online (Sandbox Code Playgroud)

问题:

当我使用以下查询时:

mutation update($id: String, $text: String) {
  UpdatePost(id: $id, text: $text) {
    id
    text
  }
}
Run Code Online (Sandbox Code Playgroud)

具有以下参数:

{
  "id": "a19289b3-a191-46e2-9912-5a3d1b067cb2",
  "text": "text"
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

{
  "error": {
    "errors": [
      {
        "message": "Variable \"$id\" of type \"String\" used in position expecting type \"ID!\".",
        "locations": [
          {
            "line": 1,
            "column": 17
          },
          {
            "line": 2,
            "column": 18
          }
        ],
        "extensions": {
          "code": "GRAPHQL_VALIDATION_FAILED"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的字符串 ID 转换为实际的 ID 类型?或者完全避免这个错误?

Dan*_*den 6

您看到的错误与查询变量定义中指定的变量类型有关。它与变量的值无关(这似乎是正确的)。根据错误消息,$id变量的类型为String,而不是ID您粘贴的查询中显示的类型。

无论如何,因为参数的类型id$id使用变量的地方)是ID!,而不是ID,所以变量的类型也应该是ID!

指示!非空(必需)类型。换句话说,id必须始终提供参数,并且不能为其指定 value null。传递参数的任何变量也必须为非空。如果变量的类型是ID而不是ID!,我们告诉 GraphQL 该变量可能被省略或有一个null值,这与使用它的参数不兼容。

请注意,反之则不然:如果参数的类型是ID,则IDID!变量将是有效的。