【问题标题】:How can I return enum options in GraphQL?如何在 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']

标签: javascript node.js graph apollo-server graphql-tools


【解决方案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'],它可能会更简单。

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多