使用graphql-yoga开发GraphQL服务时resolver接收的args为undefined如何解决?
问题根因
你写的resolver函数参数顺序错误,GraphQL的resolver固定接收4个顺序参数,分别是:
- 第一个:
parent/root:父解析器的返回值,顶级Query的这个参数一般为undefined或者null - 第二个:
args:客户端传入的参数集合,你要的name就在这个对象里 - 第三个:
ctx:上下文对象,用来传递全局共享的内容比如数据库连接、用户信息等 - 第四个:
info:包含本次查询的AST相关信息
你现在直接把第一个参数命名为args,实际上接收到的是parent值,自然取不到客户端传的参数。
修复方案
只需要把greeting解析器的参数调整顺序即可,不需要改其他逻辑:
const resolvers={ Query:{ // 补上第一个parent参数,用_表示不用的占位参数即可 greeting:(_, args)=>{ console.log(args) return `Konika said to ${args.name}` }, me:()=>{ return{ id:"12345", name: "jalmal", email: "ja@gmail.com", age: null } }, post:()=>{ return{ id: "12345", title:"I am ok with it", body:"Why I am failed" } } } }
修复后重新启动服务,再执行你的查询语句就能正常拿到name参数的值。
内容的提问来源于stack exchange,提问作者noob_developer
相关产品推荐
相关产品推荐

