使用 express-graphql 访问请求对象

Accessing the request object with express-graphql

根据

http://graphql.org/graphql-js/authentication-and-express-middleware/

To use middleware with a GraphQL resolver, just use the middleware like you would with a normal Express app. The request object is then available as the second argument in any resolver.

但是,当我 运行 我的解析器

module.exports = {
  Query: {
    books(root, args, context) {
      return books;
    }
  }
};

第二个参数是我的查询参数。然而,第三个参数,除非我将 context 配置 属性 覆盖为 expressGraphql 确实是我的请求对象。

我的完整配置是

app.use(
  "/graphql",
  expressGraphql({
    schema,
    graphiql: true
  })
);

是文档错了,还是我做错了什么?

都不是:)

即使在使用纯 ole'GraphQL.js(与使用 graphql-tools 或其他库相反)构建架构时,也有几种不同的方法可以传递解析器。

您可以通过创建一个 GraphQLSchema 对象来生成它,例如,在这种情况下,您的解析器包含在您添加的 GraphQLObjectType 中。 repo 就是这样做的。

或者,您可以使用带 buildSchema 的字符串来声明模式。您可以看到正在完成 in the docs。如果你走这条路,传递你的解析器的唯一方法是利用传递到你的端点配置中的 rootValue 对象。通常,传递给解析器的值参数是

  1. 参数
  2. 上下文
  3. 信息

然而,当你走上面的路线时,你失去了第一个参数......因为我想我们不能将 root 传递给它自己

这很好地说明了为什么如果您要以声明方式生成架构,graphql-tools 是必经之路。