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

Express Apollo Server合并typeDefs时触发got object错误如何解决

报错原因

这个报错是新版本@graphql-tools/load-files的加载逻辑和你当前的文件过滤规则冲突导致的:
你调用loadFilesSync的时候传入的是当前__dirname目录,且没有过滤文件后缀,所以会把当前目录下的index.js(也就是你现在写的这个合并文件本身)也加载到types数组里,数组里混入了JS模块导出的对象,传入mergeTypeDefs的时候就会触发类型不匹配的错误。旧版本依赖的加载规则对这类情况有兼容处理,重装依赖后拉到了新版本就会触发报错。

解决方法

你可以选择以下任意一种方案修改代码:

  • 方案1:加载时排除当前index.js文件
const types = loadFilesSync(path.join(__dirname, '.'), { 
  recursive: true,
  ignoreIndex: true // 新增这个参数,自动忽略index类的入口文件
})
  • 方案2:指定只加载GraphQL后缀的文件,避免加载JS/TS文件
const types = loadFilesSync(path.join(__dirname, '.'), { 
  recursive: true,
  extensions: ['graphql', 'gql'] // 只加载.graphql/.gql后缀的类型定义文件
})
  • 方案3:如果你的类型定义是写在JS/TS文件里(用gql标签包裹),则提取模块的默认导出内容:
const types = loadFilesSync(path.join(__dirname, '.'), { 
  recursive: true,
  requireMethod: (path) => require(path).default // 直接取JS/TS模块的默认导出
})

如果修改后还是报错,可以先打印console.log(types)查看加载到的内容,确认是否还有非字符串/非DocumentNode的非法值混入。

内容的提问来源于stack exchange,提问作者Fozle Rabbi Shafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:01