使用graphql-tools的makeExecutableSchema创建注册Mutation报错求助
解决GraphQL makeExecutableSchema报错:"resolver" defined in resolver, but not in schema
问题原因
你用require导入resolver文件时,因为resolver是通过export const resolver命名导出的,所以require返回的是一个包含resolver属性的对象,而非直接的解析器对象。此时你把整个对象传给makeExecutableSchema的resolvers参数,GraphQL会认为你定义了一个名为resolver的解析器字段,但你的schema里并没有这个字段,因此报错。
解决方案
修改index.ts中的resolver导入代码,通过解构取出真正的解析器对象:
const folders = fs.readdirSync(join(__dirname, "./modules")); folders.forEach((folder) => { // 解构取出resolver属性 const { resolver } = require(`./modules/${folder}/resolvers`); const typeDef = loadSchemaSync(join(__dirname, `./modules/${folder}/schema.graphql`), { loaders: [new GraphQLFileLoader()] }); schemas.push(makeExecutableSchema({ resolvers: resolver, typeDefs: typeDef })); });
验证说明
修改后,传给makeExecutableSchema的resolvers就是你定义的包含Mutation.register的解析器对象,和schema中的register mutation完全匹配,报错会消失。
内容的提问来源于stack exchange,提问作者Sakchham Sangroula
相关产品推荐
相关产品推荐

