根据
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
})
);
文档是错误的,还是我做错了什么?
答案 0 :(得分:2)
都不是:)
即使使用普通的'GraphQL.js构建模式(而不是使用graphql-tools
或其他库),也可以通过几种不同的方式传递解析器。
您可以通过创建GraphQLSchema
对象来生成它,例如,在这种情况下,您的解析器会包含在您添加到它的GraphQLObjectType
中。这是repo就是这样做的。
或者,您可以使用带有buildSchema
的字符串声明架构。你可以看到完成in the docs。如果你走这条路线,传递你的解析器的唯一方法是利用传递到你的端点配置的rootValue
对象。通常,传递给解析器的值参数是
然而,当你走上述路线时,你会丢失第一个参数...因为我想我们不能将root传递给自己
这是一个很好的说明,为什么,如果你要以声明方式生成模式,graphql-tools
是要走的路。