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?
Example code:
enum Color {
RED
GREEN
BLUE
}
type Car {
color: Color!
}
What would the resolver for Color
look like?
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);
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"
This works with resolvers too, so if I override the data by adding a resolver for Car like this:
Car: {
color: () => 'RED'
}
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.
By default, the enum is represented with the same string : enum Color { RED }
is 'RED'
.
You can override this by adding a resolver to the enum:
Color: {
RED: '#ff0000',
GREEN: '#00ff00'
},
Query {...
More info: https://www.apollographql.com/docs/graphql-tools/scalars.html#internal-values
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With