如何在 GraphQL 中返回枚举选项?

Posted

技术标签:

【中文标题】如何在 GraphQL 中返回枚举选项?【英文标题】:How can I return enum options in GraphQL? 【发布时间】:2021-07-12 04:20:03 【问题描述】:

我在这样的架构中有一个枚举:

enum Classification 
  A
  B
  C
  D

还有以下查询:

type Query 
  listClasification: Clasification

Ant解析器上的JS代码如下:

const classification = 
  A: 'A',
  B: 'B',
  C: 'C',
  D: 'D'
;

const resolvers = 
  Query: 
    listClasification: () => return classification
  ,
;

但是当我执行以下查询时:


  listClasification 

我收到以下错误:

"message": "Enum "Classification" 不能表示值: A: “A”,B:“B”,C:“C”,D:“D””,

那么,如何解决这个错误,并在一个查询中返回所有分类?

谢谢

【问题讨论】:

架构中的 listClasification: Classification 意味着您将返回这些枚举值中的 一个。不是一下子。如果想要返回多个值,GraphQL 提供的唯一选项是使用列表。 你期待什么结果? 这个:['A', 'B', 'C', 'D'] 【参考方案1】:

你有两个问题。

第一个问题出在您的架构中:listClasification 可能需要返回值列表。 GraphQL 中最接近的东西是数组。这是带有Clasification 数组的固定模式:

type Query 
  listClasification: [Clasification]

第二个问题在于您的解决方案。你想接收像['A', 'B', 'C', 'D'](一个数组)这样的数据,所以这就是你的解析器应该返回的。您当前正在返回一个对象,而不是一个数组。如果你想在 classification 对象和数组之间进行转换,这里是固定解析器。

const resolvers = 
  Query: 
    listClasification: () =>  return Object.keys(classification) 
  ,
;

请注意,如果您刚刚定义了classification = ['A', 'B', 'C', 'D'],它可能会更简单。

【讨论】:

以上是关于如何在 GraphQL 中返回枚举选项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在graphql中获取所有枚举值

如何在 GraphQL 模式中定义嵌套枚举类型

如何在 GraphQL 中为键值定义枚举

如何在前端代码中使用 GraphQL 枚举(例如在 <select> 中)?

如何在 apollo graphQL 服务器的枚举值中添加特殊字符?

在 graphql-yoga 中返回枚举的解析器函数是啥样的?