javascript - graphql 枚举未在模式中定义
问题描述
我目前正在学习 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 throw new _1.SchemaError(typeName + "." + fieldName + " 在解析器中定义,但枚举不在架构中"); ^
错误:Bonus.name 已在解析器中定义,但枚举不在架构中
解决方案
GraphQLEnumType
如果您使用typeDefs
和配置 ApolloServer,则无法使用resolvers
。相反,如果您想为您的枚举值提供自定义值,请将适当的对象作为您的一部分传递,如文档resolvers
中所示。
const resolvers: {
Bonus: {
BIG: 'Big',
SMALL: 'Small',
},
}
请注意,如果您想在内部将枚举值映射到它们的名称以外的东西,您只需要这样做。BIG
默认情况下将映射到"BIG"
并且SMALL
将映射到"SMALL"
,所以如果这就是你所需要的,就不要包含Bonus
在你的解析器中。
推荐阅读
- dc.js - 使用交叉过滤器进行嵌套分组?
- django - 如何自定义 is_valid 以接受空字符
- python - 关于如何使这个 CNN 训练更快的任何建议?
- java - 如何使用 Timers 使用动态计时器执行技能效果?
- amazon-web-services - 每当使用 OTP 代码时,从移动设备上的 AWS Cognito 托管 UI 登录获取 invalid_request invalid_grant 错误
- excel - 在另一个工作表中引用单元格,范围不起作用
- c++ - 使用 C++ 的 Oracle 数据库
- laravel - Vue Axios 一次上传多张图片
- python - 在划分样本时执行回归
- c# - 我正在尝试关闭 udp 连接