Dal*_*las 3 graphql apollo-server
我在graphql-tools文档中的任何地方都找不到应该如何利用enum所提供的模式中的类型makeExecutableSchema.任何人都知道这是怎么做到的?
示例代码:
enum Color {
RED
GREEN
BLUE
}
type Car {
color: Color!
}
Run Code Online (Sandbox Code Playgroud)
旋转变压器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);
Run Code Online (Sandbox Code Playgroud)
在GraphiQL中运行cars查询({cars {color}}),您将在我们的数据中看到为每辆汽车返回的颜色.现在,更改值的一个数据(不枚举定义)你没有定义,就像一个颜色.再次运行查询,您将看到如下错误消息:PINK
"Expected a value of type \"Color\" but received: PINK"
Run Code Online (Sandbox Code Playgroud)
这也适用于解析器,所以如果我通过为Car添加一个解析器来覆盖数据,如下所示:
Car: {
color: () => 'RED'
}
Run Code Online (Sandbox Code Playgroud)
该查询将显示所有以RED为颜色的汽车.如果更改解析程序返回的值BLACK,查询将再次出错.
枚举只是一种强制执行,即特定字段解析的任何值都在您定义的值集合中.
小智 6
默认情况下,枚举用相同的字符串表示:enum Color { RED }is 'RED'。您可以通过向枚举添加解析器来覆盖它:
Color: {
RED: '#ff0000',
GREEN: '#00ff00'
},
Query {...
Run Code Online (Sandbox Code Playgroud)
更多信息:https : //www.apollographql.com/docs/graphql-tools/scalars.html#internal-values
| 归档时间: |
|
| 查看次数: |
5039 次 |
| 最近记录: |