如何使用或使用graphql-tools枚举类型? [英] How to use or resolve enum types with graphql-tools?
问题描述
在graphql-tools
文档中,我找不到任何地方应该如何使用馈给makeExecutableSchema
的架构中的enum
类型.有人知道这是怎么做的吗?
I cannot find anywhere in the graphql-tools
documentation how one should go about utilizing enum
types in schemas that are fed to makeExecutableSchema
. Anyone have a clue how this done?
示例代码:
enum Color {
RED
GREEN
BLUE
}
type Car {
color: Color!
}
Color
的解析器是什么样的?
What would the resolver for Color
look like?
推荐答案
您不会为Color
编写解析器.这是一个简单的可运行示例:
You wouldn't write a resolver for Color
. Here's a simple, runnable example:
const bodyParser = require('body-parser');
const { graphqlExpress, graphiqlExpress } = require('graphql-server-express');
const { makeExecutableSchema } = require('graphql-tools');
const app = require('express')();
const carsData = [
{color: 'RED'},
{color: 'GREEN'},
{color: 'BLUE'},
];
const typeDefs = `
enum Color {
RED
GREEN
BLUE
}
type Car {
color: Color!
}
type Query {
cars: [Car!]!
}
`;
const resolvers = {
Query: {
cars: () => carsData,
}
};
const schema = makeExecutableSchema({
typeDefs,
resolvers,
});
app.use('/graphql', bodyParser.json(), graphqlExpress({ schema }));
app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));
app.listen(3000);
在 GraphiQL 中运行cars
查询({cars {color}}
),您将看到返回的颜色我们数据中的每辆车.现在,将数据中的值之一(不是Enum定义)更改为您未定义的颜色,例如PINK
.再次运行查询,您将看到类似以下的错误消息:
Run a cars
query ({cars {color}}
) in GraphiQL and you will see a color returned for each car in our data. Now, change one of the values in the data (not the Enum definition) to a color you didn't define, like PINK
. Run the query again and you will see an error message like:
"Expected a value of type \"Color\" but received: PINK"
这也适用于解析器,因此,如果我通过为Car添加解析器来覆盖数据,如下所示:
This works with resolvers too, so if I override the data by adding a resolver for Car like this:
Car: {
color: () => 'RED'
}
查询将显示所有带有红色作为颜色的汽车.如果将解析器返回的值更改为BLACK
,则查询将再次出错.
The query will show all the cars with RED as their color. If you change the value returned by the resolver to BLACK
, the query will error out again.
枚举只是强制将特定字段解析为的任何值都在您定义的值集中的一种方法.
Enums are just a way of enforcing that whatever value a particular field resolves to is within the set of values you define.
这篇关于如何使用或使用graphql-tools枚举类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!