如何在保持对请求对象的访问权限的同时对 express-graphql 解析器进行依赖注入?

How to do dependency injection to express-graphql resolvers while keeping access to the request object?

我在我的 nodejs 应用程序中使用 express-graphql。

为了从解析器访问数据库,我创建了一个名为 ProjectHandler 的对象(它处理数据库中名为 projects 的 table)并且我' m 通过在创建 express-graphql 实例时更改 context 将其注入解析器,如下所示:

app.use('/graphql', graphqlHTTP({
  schema,
  graphiql: true,
  context: {projectsHandler}
}))

问题是,这取代了默认上下文作为请求对象的表示,阻止我访问会话信息。

问题是,我需要会话信息和项目处理程序。我该怎么做?

graphqlHTTP 函数 returns 表达 middleware 所以为了传递自定义 context 和其中的 request 对象,我们必须用我们自己的 middleware 包装那个函数,然后激活 graphqlHTTP middleware

下面这段代码应该可以工作(还没有尝试过):

 app.use('/graphql', (request, response) => {
     return graphqlHTTP({
        schema,
        graphiql: true,
        context: {
            projectsHandler,
            request
        }
     })(request, response);
 })