1

根据

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

要将中间件与 GraphQL 解析器一起使用,只需像使用普通 Express 应用程序一样使用中间件。然后,请求对象可用作任何解析器中的第二个参数。

但是,当我运行解析器时

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

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

我的完整配置是

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

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

4

1 回答 1

3

两者都不 :)

即使在使用普通 ole' GraphQL.js(而不是使用graphql-tools或其他库)构建架构时,也有几种不同的方法可以传入解析器。

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

或者,您可以使用带有buildSchema. 您可以在 docs中看到这一点。如果你走这条路,传入解析器的唯一方法是利用rootValue传入端点配置的对象。通常,传递给解析器的 values 参数是

  1. 参数
  2. 语境
  3. 信息

但是,当您走上述路线时,您会丢失第一个参数......因为我想我们不能将 root 传递给它自己

这很好地说明了为什么,如果您要以声明方式生成模式,graphql-tools是要走的路。

于 2017-09-20T16:46:30.400 回答