2016-12-01 17 views
8

次のapolloサーバのgraphqlスキーマ これらを別々のモジュールに分割したいので、私はルートクエリスキーマの下で作成者のクエリを望んでいません。 。だから私は、私は次のことを試してみましたルートクエリapollo graphqlサーバでネストされたリゾルバを作成する方法

type Author { 
    id: Int, 
    firstName: String, 
    lastName: String 
} 
type authorQueries { 
    author(firstName: String, lastName: String): Author 
} 

type Query { 
    authorQueries: authorQueries 
} 

schema { 
    query: Query 
} 

に追加する前にauthorQueriesと呼ばれる別の層を追加しました..あなたは著者の関数が指定される前に、authorQueriesは別の層として追加されたことがわかります。

Query: { 
    authorQueries :{ 
     author (root, args) { 
      return {} 
     } 
    } 
} 

Graphiqlに照会すると、私はまた、私は次のエラーを取得する追加の層が..

{ 
    authorQueries { 
     author(firstName: "Stephen") { 
      id 
     } 
    } 
} 

と付け加えました。

"message": "Resolve function for \"Query.authorQueries\" returned undefined",

答えて

12

単に親フィールドの戻り値の型にリゾルバを定義し、「ネストされた」リゾルバを作成します。あなたがそこにあなたのリゾルバを置くことができますので、この場合は、あなたのauthorQueriesフィールドは、タイプauthorQueriesを返します。

{ 
    Query: { authorQueries:() => ({}) }, 
    authorQueries: { 
    author(root, args) { 
     return "Hello, world!"; 
    } 
    } 
} 

だから、技術的な意味では、ネストされたリゾルバのようなものは存在しない - すべてのオブジェクトタイプはフラットなリストを持っていますこれらのフィールドには戻り値の型があります。 GraphQLクエリのネストは、結果をネストします。

+0

著者のタイプのリゾルバを定義するような、より良い方法はありませんか?過大なルートパラメータの値を使用していますか? 私はこれを好きなときに、私は、他のタイプのautherが使用されるたびにリゾルバを作成します。 – user7776232

+0

少なくとも、現在のGraphQL実装では、著者を返すすべてのフィールドにリゾルバを定義する必要があります。将来的には良いかもしれない。 – stubailo

関連する問題