首页 > 解决方案 > 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 已在解析器中定义,但枚举不在架构中

标签: javascriptnode.jsenumsgraphql

解决方案


GraphQLEnumType如果您使用typeDefs和配置 ApolloServer,则无法使用resolvers。相反,如果您想为您的枚举值提供自定义值,请将适当的对象作为您的一部分传递,如文档resolvers中所示。

const resolvers: {
  Bonus: {
    BIG: 'Big',
    SMALL: 'Small', 
  },
}

请注意,如果您想在内部将枚举值映射到它们的名称以外的东西,您只需要这样做。BIG默认情况下将映射到"BIG"并且SMALL将映射到"SMALL",所以如果这就是你所需要的,就不要包含Bonus在你的解析器中。


推荐阅读