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

Apollo Server报错:Query.totalPosts在resolvers定义但未在schema声明

问题原因

抛出Error: Query.totalPosts defined in resolvers, but not in schema的核心原因是Apollo Server启动时会做一致性校验:所有resolver中定义的字段,必须在加载合并后的GraphQL Schema(即typeDefs)中存在对应声明。你当前代码中resolver的Query下定义了totalPosts、me两个字段,但合并得到的typeDefs里没有这两个字段的声明,校验不通过直接抛错。

修复步骤

  • 检查./typeDefs目录下的类型定义,确认Query类型声明了和resolver对应的字段,正确的字段声明示例:
type Query {
  totalPosts: Int!
  me: String!
}

如果你的typeDefs拆分在多个文件中,非根文件的Query定义必须用extend type Query,否则合并时会出现类型覆盖,最终生成的Schema缺字段。

  • 检查fileLoader的加载配置,默认配置下fileLoader只会识别.graphql后缀文件,如果你的类型定义写在.js文件里,必须显式指定加载规则,否则会加载到空的typeDefs,自然匹配不到resolver字段:
// 修正typeDefs加载逻辑
const typeDefs = mergeTypes(fileLoader(path.join(__dirname, './typeDefs'), {
  extensions: ['.js', '.graphql'],
  recursive: true
}));
  • 删除代码中重复的applyMiddleware调用,你连续两次调用该方法,第二次未指定path参数会导致路由重复挂载,属于冗余代码,保留带path参数的那行即可。

临时规避方案(仅本地调试用,禁止生产环境使用)

如果你需要临时跳过校验跑通流程,可以在初始化Apollo Server时关闭校验规则,但这只是绕过报错,后续必须对齐Schema和resolver的字段定义:

const apolloServer = new ApolloServer({
  typeDefs,
  resolvers,
  // 跳过字段一致性校验
  validationRules: () => []
});

常见触发场景提示:这类报错90%以上由三类问题导致:typeDefs文件加载失败、字段名拼写/大小写不匹配、多文件合并typeDefs时未用extend关键字导致类型覆盖,优先排查这三点可以快速定位问题。

内容的提问来源于stack exchange,提问作者Gaia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:30:42