How to use or resolve enum types with graphql-tools?

泄露秘密 提交于 2019-12-07 15:22:53

问题


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?


回答1:


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.




回答2:


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



来源:https://stackoverflow.com/questions/45056347/how-to-use-or-resolve-enum-types-with-graphql-tools

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!