2017-09-20 57 views
0

请求对象根据访问与快递-graphql

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

要使用中间件来GraphQL解析器,只需使用中间件就像你会与一个正常的快速应用。然后,请求对象可作为任何解析器中的第二个参数。

然而,当我跑我的解析器

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

第二个参数是我的查询参数。第三个参数,但是,除非我重写context config属性为expressGraphql确实是我的请求对象。

我的全配置是

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

是文档错了,还是我错误地做一些事情?

回答

1

无论:)

即使建设有普通的OLE” GraphQL.js您的架构时(而不是使用graphql-tools或另一个库),有一对夫妇不同的方式在你的解析器通过。

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

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

  1. ARGS
  2. 方面
  3. 资讯

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

这是一个很好的例子,为什么,如果你要生成一个sche马声明,graphql-tools是要走的路。

+0

哦,男人非常感谢你 - 这实际上我还有其他几点困惑。所以我通过'graphql-tools'传递我的解析器,https://github.com/arackaf/booklist/blob/feature/add-graphQL/schema.js#L16你是说我还有另一条路线,它没有我的模式作为字符串,并会影响我的解析器参数?所以如果有人走这条路线,什么是根的价值?我仍然可以指定它,docs提到了“root resolver”,但我并没有完全理解这意味着什么 - 我认为它是针对静态全局帮手或其他东西:-P –

+1

我相当确信**只有**时间当你在'rootValue'中定义你的解析器时,你会看到第一个参数放下。据我所知,'rootValue'是'context'可用之前的剩余物 - 现在它的使用受到限制...除非你选择使用'buildSchema',在这种情况下,它是唯一可以通过解析器传递的方法。 [Example here](http://graphql.org/graphql-js/running-an-express-graphql-server/)。如果你已经使用'graphql-tools',你可能不需要搞乱rootValue。 –

+0

用几个示例链接编辑答案。 –