使用Apollo 2时GraphiQL传递name参数报错:未知参数
解决Apollo 2中GraphQL查询
group(name: ...)提示参数未知的问题 看起来你的核心问题是GraphQL Schema没有正确识别group字段的name参数,导致查询时报错。我们一步步来排查和解决:
一、排查Schema加载问题
错误提示Unknown argument "name" on field "group" of type "Query"说明最终生成的Schema里,Query类型的group字段并没有定义name参数——尽管你在Groups.graphql里明确写了这个参数。最常见的原因是:
1. Meteor服务器未重启,Schema修改未生效
Meteor的热重载对.graphql文件的支持偶尔会出问题,如果你是在服务器运行时修改了Groups.graphql,旧的Schema可能还留在内存中。先完全重启Meteor服务器,再重新测试查询。
2. 验证Schema是否正确生成
可以在主文件里添加代码,打印出生成的Schema,确认group字段的参数是否存在:
import { printSchema } from 'graphql'; // 导入printSchema工具 // ... 其他现有代码 const schema = makeExecutableSchema({ typeDefs, resolvers }); console.log('Generated Schema:', printSchema(schema)); // 打印完整Schema到控制台 createApolloServer({ schema });
重启服务器后,查看控制台输出的Schema,确认Query部分是否包含:
type Query { hi: String groups: [Group] group(name: String): Group }
如果输出里的group没有name参数,说明你的GroupsSchema没有被正确读取——检查文件路径是否正确,或者文件里是否有语法错误(比如中文标点、拼写失误)。
二、修复Resolver参数问题
虽然这不是当前报错的直接原因,但解决Schema问题后,你的Resolver写法也需要调整才能正确获取参数:
GraphQL resolver的参数顺序是固定的:
parent:父字段的返回值(这里用_忽略即可)args:传入的查询参数(包含你需要的name)context:上下文对象info:查询的元信息
修改resolvers.js里的group resolver:
group(_, args) { console.log('group resolver called with args:', args); // 如果你用Mongo集合: // return Groups.findOne({ name: args.name }); // 用你当前的测试数据的话: return [{ name: '1', test: 'test 1' }, { name: '2', test: 'test 2' }].find(g => g.name === args.name); }
三、测试查询
重启服务器后,在GraphiQL里执行:
{ group(name: "1") { name } }
应该就能正常返回对应的群组数据了。
内容的提问来源于stack exchange,提问作者Evanss
相关产品推荐
相关产品推荐

