You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:33:19