graphql-server-express 的 resolver 接收的参数只传入了 graphql 的查询参数和初始化时配置的 context ,并没有传入 express 的 request 对象,所以如果想要直接操作请求数据就比较困难。

但其实初始化的时候它也接受函数作为参数,并在每次请求时运行这个函数并传入 request 对象。官方给出的示例是

graphqlExpress(request => ({
  schema: typeDefinitionArray,
  context: { user: request.session.user }
}))

我一开始傻逼了没仔细看完文档,撸了点源码才发现有这功能...

expressApollo runHttpQuery graphqlOptions