【问题标题】:GraphQL field with space带有空格的 GraphQL 字段
【发布时间】:2021-04-06 19:38:54
【问题描述】:

我正在尝试在非常旧的遗留代码上使用新的 GraphQL 服务器,其中列名有空格,例如:“Poke ball”

我一直在尝试运行这个查询:

query{{userItems{Poke ball}}}

得到了这个:

extensions: {code: "GRAPHQL_VALIDATION_FAILED",…}
locations: [{line: 1, column: 12}]
message: "Cannot query field "Poke" on type "UserItems"."

我尝试使用引号但没有成功,知道这是否受支持/解决方法吗?

谢谢。

【问题讨论】:

  • 在 graphql 中使用有效名称,在内部映射到中间件/解析器/orm/自定义指令中的无效名称...取决于服务器特定要求/可能性

标签: javascript graphql graphql-js


【解决方案1】:

GraphQL specification 要求事物的名称(字段、类型、参数等)仅包含字母、数字和下划线。字段名称不能包含空格,因为空格和其他 whitespace 用于分隔各个标记。换句话说,一个或多个空格或换行符用于表示,例如,一个字段的名称已终止,而另一个字段的名称已开始。

如果您的底层数据层返回的数据键包含空格,您需要定义一个具有允许名称的字段(如pokeball),然后为该字段编写解析器。例如:

const UserItems = new GraphQLObjectType({
  name: "UserItems",
  fields: () => ({
    pokeball: {
      type: Pokeball,
      resolve: (parent) => {
        // The parent value will be whatever the parent field resolved to.
        // We look for a property named "Poke ball" on that value and return it.
        return parent["Poke ball"];
      },
    },
    ...
  }),
});

【讨论】:

    【解决方案2】:

    或在架构中,执行此操作

    directive @fetch(from : String!) on FIELD_DEFINITION
    
    type Product {
        Pokeball : String @fetch(from:"Poke ball")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2014-07-23
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2021-07-18
      • 2014-06-09
      相关资源
      最近更新 更多