我当前正在学习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/generate/AddresolveFunctionFunctionSthema.js:53 抛出新的_1.SchemaError(TypeName "。" fieldName "在解析器中定义,但枚举不在架构中"(; ^
错误:bonus.name是在解析器中定义的,但枚举不在架构中
如果您使用typeDefs
和resolvers
配置Apolloserver,则不能使用GraphQLEnumType
。相反,如果您想为枚举值提供自定义值,请作为resolvers
的一部分传递适当的对象,如文档中所示。
const resolvers: {
Bonus: {
BIG: 'Big',
SMALL: 'Small',
},
}
请注意,只有要在内部将枚举值映射到其名称以外的其他内容时才需要执行此操作。BIG
将映射到"BIG"
,SMALL
将默认情况下映射到"SMALL"
,因此,如果您需要的话,请根本不包括Bonus
。
如果您使用typedefs和resolvers配置Apolloserver,则实际上可以使用GraphQlenumType。
将Bonustype定义为typedefs对象中的标量:
const BonusType = new GraphQLEnumType({
name: 'Bonus',
values: {
BIG: {
value: "Big",
},
SMALL: {
value: "Small",
}
},
});
const typeDefs = gql`
scalar BonusType
`;
现在,每当添加bonustype对象的查询时,您都会得到结果:1. Bonustype Enum的名称。2. Bonustype Enum的价值。
参见https://spectrum.chat/apollo/apollo/apollo-server/how-to-cuse-custom-enums~376c8da8-19a5-4338-9bee-4cba7a036d8f