express-graphql的resolver中context始终为undefined如何解决
问题原因
你遇到的问题是resolver参数顺序不符合GraphQL官方规范导致的。
所有GraphQL resolver的参数固定为4个,顺序不可调整:
- 第1位:
parent,父级resolver的返回值,顶级查询场景下为根对象/空值 - 第2位:
args,当前请求传入的字段参数,也就是你原本以为会在第一位拿到的值 - 第3位:
context,你在graphqlHTTP配置中定义的上下文对象 - 第4位:
info,当前查询的执行元信息,包含查询AST、schema结构等内容
你的代码中将args放在了参数第一位,所以实际拿到的第一个值是parent,第二个值才是请求参数,第三个位置对应context,自然会出现context、第三个参数为undefined的现象。
修复方法
调整resolver的参数顺序即可,示例代码如下:
// 完整参数写法 const resolver = async (parent, args, context, info) => { console.log(context, info); const { email, password } = args; // 原有业务逻辑 }; // 不需要的参数可以用占位符省略 const resolver = async (_, args, context) => { console.log(context); const { email, password } = args; // 原有业务逻辑 };
内容的提问来源于stack exchange,提问作者Fed
相关产品推荐
相关产品推荐

