在GraphQL参数化查询中使用ID
我有以下模式:在GraphQL参数化查询中使用ID,graphql,apollo,grandstack,Graphql,Apollo,Grandstack,我有以下模式: type Post { id: ID! text: String } 我使用的是来自neo4j graphql.js的自动生成突变,因此我可以访问以下突变: UpdatePost( id: ID! text: String ): Post 问题: 当我使用以下查询时: mutation update($id: String, $text: String) { UpdatePost(id: $id, text: $text) { id text
type Post {
id: ID!
text: String
}
我使用的是来自neo4j graphql.js
的自动生成突变,因此我可以访问以下突变:
UpdatePost(
id: ID!
text: String
): Post
问题:
当我使用以下查询时:
mutation update($id: String, $text: String) {
UpdatePost(id: $id, text: $text) {
id
text
}
}
使用以下参数:
{
"id": "a19289b3-a191-46e2-9912-5a3d1b067cb2",
"text": "text"
}
我得到以下错误:
{
"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"
}
}
]
}
}
有没有办法将我的字符串ID转换为实际的ID类型?或者完全绕过此错误?您看到的错误与查询的变量定义中指定的变量类型有关。它与变量的值(看起来是正确的)无关。根据错误消息,
$id
变量的类型是String
,而不是粘贴的查询中显示的id
无论如何,因为id
参数的类型(使用$id
变量的地方)是id
,而不是ID
,那么变量的类型也应该是ID代码>
代码>表示非空(必需)类型。换句话说,必须始终提供id
参数,并且不能为其指定值null
。传递给参数的任何变量也必须为非null。如果变量的类型是ID
而不是ID
,我们告诉GraphQL变量可能被省略或有一个null
值,这与使用它的参数不兼容
请注意,相反的情况并非如此:如果参数的类型为ID
,则为ID
或ID代码>变量将是有效的。如果其他人正在寻找答案,下面是几个如何在C#中使用ID变量的示例:
var请求=新的GraphQLRequest
{
查询=@“
查询getToken($tokenId:ID!){{
令牌(其中:{id:$tokenId}}orderBy:decimals,orderDirection:desc){{
身份证件
符号
名称
}}
}},Variables=new
{
令牌ID=“”
}
};
和使用列表:
querygettoken($tokenIds:[ID!)){{
令牌(其中:{id_in:$tokenIds}}orderBy:decimals,orderDirection:desc){{
身份证件
符号
名称
}}
}},Variables=new
{
tokenIds=newarraylist()
}
我理解这一点,但如何将此类字符串设置为ID?我使用查询字段时返回的确切值。您不会将字符串“转换”为ID。ID标量只接受字符串(和整数)作为中概述的有效值。如果在修复变量定义后仍看到错误,请重新检查它是否确实是同一个错误。粘贴的错误与粘贴的查询不匹配。错误消息与匹配。我已从架构中清除了不相关的字段。>如果在修复变量定义后仍看到错误,请定义这正是我问题的重点…我如何修复变量定义?我问题中的值正是查询我要修改的对象时返回的值。而且,当我不使用参数化查询时,这不会出现将突变定义更改为突变更新($id:id!