使用graphql-js的parse方法无法填充variableDefinitions字段的问题
问题解答:graphql-js parse后variableDefinitions为空数组的原因
你忽略了GraphQL的变量声明规则:所有在查询中使用的变量,必须在操作定义的开头显式声明类型,才会被纳入variableDefinitions字段。
你的示例查询{ x(id: $id) { id } }属于匿名无变量声明的查询——虽然在字段参数里用到了$id,但没有在操作层面定义这个变量的类型,所以graphql-js的parse方法只会把$id识别为单个Variable节点(出现在arguments的value中),不会将其加入variableDefinitions数组。
要让$id被纳入variableDefinitions,必须修改查询语句,显式声明变量及其类型,示例如下:
query($id: ID!) { x(id: $id) { id } }
此时调用parse方法,variableDefinitions字段就会包含对应的变量定义结构:
{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "ID" } } }, "directives": [] }
总结:GraphQL遵循"变量先声明后使用"的规则,未在操作开头声明的变量,仅会作为语法节点存在,不会被归类到操作的variableDefinitions中。
内容的提问来源于stack exchange,提问作者cyberwombat
相关产品推荐
相关产品推荐

