gpt4 book ai didi

graphql - GraphQL 枚举类型会自动解析它们的值吗?

转载 作者:行者123 更新时间:2023-12-01 01:42:56 32 4
gpt4 key购买 nike

我应该期望枚举类型自动解析还是仅存在类型以限制选项?

给定以下 GraphQL Schema:

type Job {
description: String!
status: Status!
}

enum Status {
PENDING_REVIEW
PENDING_APPROVAL
APPROVED
}

和一个看起来像这样的查询:

query job {
description
status
}

如果我的数据库返回以下内容:

{ "description": "Some irrelevant job description", "status": 1 }

我希望 GraphQL 返回:

{ "description": "Some irrelevant job description", "status": "PENDING_APPROVAL" }

我是否设置错误,或者这种预期行为需要我为 status 编写解析器吗?

const getQuestionStatus = ({ status }) => ['PENDING_REVIEW', 'PENDING_APPROVAL', 'APPROVED'][status];

最佳答案

在 GraphQL.js 中,枚举类型中的每个枚举值都可能有一个关联的值。设置此值是可选的;它默认为值名称的字符串表示形式。也就是说,对于像这样的枚举:

enum ExampleEnum {
FOO
BAR
}

默认情况下, FOO 的值将是 "FOO" .如果您使用的是 graphql-tools要构建您的架构(或使用 apollo-server ,它在引擎盖下使用 graphql-tools),我们可以直接在我们的解析器中传递 Enum 类型的值:
const resolvers = {
Query: {
example: () => 11, // field with ExampleEnum type
},
ExampleEnum: {
FOO: 11,
BAR: 23,
},
}

完成后,我们可以在解析器中返回定义的值,并将其序列化为适当的 Enum 值。注意:用作参数的枚举也是如此——如果 FOO作为参数传入,解析器实际上会收到一个值 11 .

不提供任何值等同于执行以下操作:
ExampleEnum: {
FOO: 'FOO',
BAR: 'BAR',
}

还值得注意的是,提供值不会影响枚举值在响应中的显示方式。当执行结果序列化为 JSON 时,枚举值始终显示为与枚举值名称匹配的字符串值(即我们示例中的 "FOO""BAR")。

原版 GraphQL.js 怎么样?

如果您以编程方式定义架构,也可以提供枚举值的值。这是上述示例的等效项:
const ExampleEnumType = new GraphQLEnumType({
name: 'ExampleEnum',
values: {
FOO: {
value: 11,
},
BAR: {
value: 23,
},
},
})

关于graphql - GraphQL 枚举类型会自动解析它们的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54367692/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com