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

问题描述

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

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 可能需要返回一个值列表。 GraphQL 中最接近的是数组。这是带有 Clasification 数组的固定架构:

type Query {
  listClasification: [Clasification]
}

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...