如何在 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 枚举(例如在 <select> 中)?