2017-09-20 102 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

用幾個示例鏈接編輯答案。 –