2017-05-27 8 views
2

GraphQLはgive an exampleの "context"という引数を受け入れるリゾルバ関数を提供しています。GraphQLリゾルバの(データベースまたは他の)コンテキストをどのように設定するのですか?

は、彼らはそれについてこれを言わなければならない -

contextすべてのリゾルバに提供し、現在ログインしているユーザー、またはデータベースへのアクセスのような重要なコンテキスト情報を保持している値。

そして、彼らのコード例のようになります -

Query: { 
    human(obj, args, context) { 
    return context.db.loadHumanByID(args.id).then(
     userData => new Human(userData) 
    ) 
    } 
} 

これは私にはリゾルバ関数内のデータベースにアクセスしたいために完全に自然なパターンようで、当然それは私が何をする必要があるかです。

このデータベースコンテキストは、明らかに自動的には設定されません。GraphQLは、データの永続性の特定の手段について完全に無関心であるためです。

私の質問は、どのように特定のdbインターフェイスを提供するためにこのコンテキストを設定するのですか?私はチュートリアル/ドキュメント、または実際にどこでもこれの言及を見つけることができません。

答えて

2

graphql関数を呼び出すときにcontextをgraphqlに渡すことができます。
hereと指定されています。ここで

graphql機能のフロー定義である:

graphql(
    schema: GraphQLSchema, 
    requestString: string, 
    rootValue?: ?any, 
    contextValue?: ?any, // Arbitrary context 
    variableValues?: ?{[key: string]: any}, 
    operationName?: ?string 
): Promise<GraphQLResult> 
3

コンテキストは、サーバーのセットアップ時に定義されます。私もドキュメントでそれを見ることができませんでした。

graphqlExpress(req => { 
    return { 
    schema: makeExecutableSchema({ 
     typeDefs: schema.ast, 
     resolvers, 
     logger 
    }), 
    context: { 
     db: mongodb.MongoClient.connect(...) 
    } 
    }; 
}) 
関連する問題