我目前正在学习GraphQL,但偶然发现了此错误。如何在仍使用GraphQLEnumType对象的同时修复它。
const { ApolloServer, gql } = require('apollo-server');
const { GraphQLEnumType } = require('graphql');
const Bonus = new GraphQLEnumType({
name: 'Bonus',
values: {
BIG: {
value: "Big",
},
SMALL: {
value: "Small",
}
},
});
const typeDefs = gql`
enum Bonus {
BIG
SMALL
}
`;
const resolvers = {
Bonus : Bonus
}
const server = new ApolloServer({
typeDefs,
resolvers
});
server.listen().then(({ url }) => {
console.log(` Server ready at ${url}`);
});
以下是错误:
/home/jonas/Projects/javascript-questions-flow4b/backend/node_modules/graphql-tools/dist/generate/addResolveFunctionsToSchema.js:53 抛出新的_1.SchemaError(typeName +“。” + fieldName +“已在解析程序中定义,但枚举不在架构中”); ^
错误:Bonus.name是在解析器中定义的,但枚举不在架构中
答案 0 :(得分:1)
如果使用GraphQLEnumType
和typeDefs
配置ApolloServer,则不能使用resolvers
。相反,如果要为枚举值提供自定义值,则将适当的对象作为resolvers
的一部分传递,如the docs所示。
const resolvers: {
Bonus: {
BIG: 'Big',
SMALL: 'Small',
},
}
请注意,仅当您想在内部将枚举值映射到名称之外的其他内容时,才需要执行此操作。默认情况下,BIG
将映射到"BIG"
,而SMALL
将映射到"SMALL"
,因此,如果您只需要这些,就不要在解析器中包含Bonus
完全没有。
答案 1 :(得分:0)
如果要使用typeDefs和解析器配置ApolloServer,则可以实际使用GraphQLEnumType。
在typeDefs对象中将BonusType定义为标量:
const BonusType = new GraphQLEnumType({
name: 'Bonus',
values: {
BIG: {
value: "Big",
},
SMALL: {
value: "Small",
}
},
});
const typeDefs = gql`
scalar BonusType
`;
现在,每当添加BonusType对象的查询时,您都会得到以下结果: 1. BonusType枚举的名称。 2. BonusType枚举的值。