express-graphql如何将自定义变量挂载到GraphQL context
问题原因
你遇到的问题由两个核心点导致:
- Resolver参数顺序错误:你使用
graphql包原生的buildSchema构建Schema,这种场景下Root resolver的参数顺序为(请求参数args, 自定义上下文context, 执行信息info),没有首参数parent。你当前代码里把第三个参数info(也就是你打印出来的那一大坨执行相关数据)当成了自定义context,实际自定义context是第二个参数。 - 你之前的理解有误:
variableValues对应客户端传递的GraphQL查询变量,和你自定义的context没有关联,自定义参数不会出现在这个字段里。
解决步骤
1. 调整Resolver参数
修改你的get_number resolver,取第二个参数作为context即可:
get_number(_, context) { console.log(context); // 这里输出的就是{someValue: 100} return context.someValue; }
2. (可选优化)调整context传入方式
express-graphql推荐用回调函数的方式返回配置,后续如果需要挂载请求相关的参数(比如请求头里的用户身份信息)到context会更方便:
app.use(graphqlHTTP((req, res) => ({ schema: schema, rootValue: resolver, graphiql: true, context: {someValue: 100} })))
修改完成后重新启动服务即可正常拿到context里的参数。
内容的提问来源于stack exchange,提问作者MichaelLearner
相关产品推荐
相关产品推荐

