我在graphql-tools文档中找不到任何地方应该如何在馈给enum的模式中利用makeExecutableSchema类型。有人知道这是怎么做的吗?

示例代码:

enum Color {
  RED
  GREEN
  BLUE
}

type Car {
  color: Color!
}
Color的解析器是什么样的?

最佳答案

您不会为Color编写解析器。这是一个简单的可运行示例:

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。再次运行查询,您将看到以下错误消息:
"Expected a value of type \"Color\" but received: PINK"

这也适用于解析器,因此,如果我通过添加Car解析器来覆盖数据,如下所示:
Car: {
  color: () => 'RED'
}

该查询将显示所有带有红色作为颜色的汽车。如果将解析器返回的值更改为BLACK,则查询将再次出错。

枚举只是强制将特定字段解析为的任何值都在您定义的值集中的一种方法。

关于graphql - 如何使用或使用graphql-tools枚举类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45056347/

10-15 14:36