2017-02-27 4 views
0

私が見つけたすべての例は、queryトップレベルのオブジェクトを持っています。その後、クエリのリストは、より深く進むために型を返します。graphqlクエリをネストする方法

私は、クエリの数が多いので、私はグループにそれらをアップしたいと思い、これは私が試したものです:

const AppType = new GraphQLObjectType({ 
    name: 'App', 
    description: 'Generic App Details', 

    fields:() => ({ 
     name: { type: GraphQLString }, 
     appId: { type: GraphQLInt }, 
    }), 
}); 

const MyFirstQuery = { 
    type: new GraphQLList(AppType), 
    args: { 
     appId: { type: GraphQLInt }, 
    }, 
    resolve: (root, args) => fetchApp(args.appId), 
};  

/* snip MySecondQuery, MyThirdQuery, MyFourthQuery */ 

const MyFirstGroupQuery = new GraphQLObjectType({ 
    name: 'myFirstGroup', 
    description: 'the first group of queries', 

    fields:() => ({ 
     myFirstQuery: MyFirstQuery, 
     mySecondQuery: MySecondQuery, 
     myThirdQuery: MyThirdQuery, 
     myFourthQuery: MyFourthQuery, 
    }), 
}); 

/* snip MySecondGroupQuery, MyThirdGroupQuery and their types */  

const QueryType = new GraphQLObjectType({ 
    name: 'query', 
    description: 'read-only query', 

    fields:() => ({ 
     myFirstGroup: MyFirstGroupQuery, 
     mySecondGroup: MySecondGroupQuery, 
     myThirdGroup: MyThirdGroupQuery, 
    }), 
}); 

const Schema = new GraphQLSchema({ 
    query: QueryType, 
}); 

私はより多くのネストレベルを作るためにQueryTypeを行ったように、私はMyFirstGroupQueryを作ることができないのはなぜ?私はQueryTypeですべてのクエリを入れた場合、コードは正常に動作しますが、私のMyFirstGroupQueryはエラーを生成します。

Error: query.myFirstGroup field type must be Output Type but got: undefined. 

私は私が望むものを達成するにはどうすればよいですか?私は本当にすべてのクエリにプレフィックスを付けるだけではありません。

+0

をあなたはあなたのような意味が –

答えて

1

エラーquery.myFirstGroup field type must be Output Type but got: undefined.はあなたがtypeフィールド

myFirstGroup: { type: MyFirstGroupQuery, resolve:() => MyFirstGroupQuery, },

とタイプMyFirstGroupQuery各フィールドがtypeは、このような定義されていなければならない場合を使用して種類を提供する必要がmyFirstGroup の型を提供していないことを意味しGraphQLIntGraphQLStringGraphQLIDでも、カスタムタイプのようなものです。MyFirstGroupQuery

GraphQLは厳密に基づいて入力され

QueryTypeであるあなたがRootQueryを提供GraphQLSchemaコンストラクタ関数では、それはそれだけでその場typeが定義されている必要がありますGraphQLObjectTyperootQueryを受け付けGraphQLSchemaだ、あなたが宣言したすべてのフィールドはtypeが定義されている必要があります

https://github.com/graphql/graphql-js

https://github.com/graphql/graphql-js/blob/master/src/type/schema.js#L32

const { 
    GraphQLID, 
    GraphQLInt, 
    GraphQLString, 
    GraphQLObjectType, 
    GraphQLSchema, 
    GraphQLList, 
} = require('graphql'); 

const AppType = new GraphQLObjectType({ 
    name: 'App', 
    description: 'Generic App Details', 

    fields:() => ({ 
     name: { type: GraphQLString }, 
     appId: { type: GraphQLInt }, 
    }), 
}); 

// const MyFirstQuery = { 
//  type: new GraphQLList(AppType), 
//  args: { 
//   appId: { type: GraphQLInt }, 
//  }, 
//  resolve: (root, args) => fetchApp(args.appId), 
// }; 

const myFirstQuery = new GraphQLObjectType({ 
    name: 'First', 
    fields:() => ({ 
     app: { 
      type: new GraphQLList(AppType), 
      args: { 
       appId: { type: GraphQLInt }, 
      }, 
      resolve: (root, args) => fetchApp(args.appId), 
     }, 
    }), 
}); 

/* snip MySecondQuery, MyThirdQuery, MyFourthQuery */ 

const MyFirstGroupQuery = new GraphQLObjectType({ 
    name: 'myFirstGroup', 
    description: 'the first group of queries', 
    fields:() => ({ 
     myFirstQuery: { 
      type: myFirstQuery, 
      resolve:() => [], // promise 
     }, 
     // mySecondQuery: { 
     //  type: MySecondQuery, 
     //  resolve:() => //data 
     // } 
     // myThirdQuery: { 
     //  type: MyThirdQuery, 
     //  resolve:() => // data 
     // } 
     // myFourthQuery: { 
     //  type: MyFourthQuery, 
     //  resolve:() => //data 
     // } 
    }), 
}); 

/* snip MySecondGroupQuery, MyThirdGroupQuery and their types */ 

const QueryType = new GraphQLObjectType({ 
    name: 'query', 
    description: 'read-only query', 

    fields:() => ({ 
     myFirstGroup: { 
      type: MyFirstGroupQuery, 
      resolve:() => MyFirstGroupQuery, 
     }, 
     // mySecondGroup: { 
     //  type: MySecondGroupQuery, 
     //  resolve: MySecondGroupQuery 
     // } 
     // myThirdGroup: { 
     //  type: MyThirdGroupQuery, 
     //  resolve: MyThirdGroupQuery 
     // } 
    }), 
}); 

const Schema = new GraphQLSchema({ 
    query: QueryType, 
}); 

module.exports = Schema; 

GraphiQL

enter image description here

+0

おかげGraphQLSchema' 'で' Quertype'を宣言しました!タイプが 'GraphQLSchema'から省略されたという事実が、私を立ち上げました! –

関連する問題