Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何嵌套graphql查询_Graphql_Graphql Js - Fatal编程技术网

如何嵌套graphql查询

如何嵌套graphql查询,graphql,graphql-js,Graphql,Graphql Js,我找到的所有示例都有一个query顶级对象,然后是一个查询列表,然后返回类型以进行深入分析 由于我有大量的查询,我想将它们分组,这是我尝试的: const AppType = new GraphQLObjectType({ name: 'App', description: 'Generic App Details', fields: () => ({ name: { type: GraphQLString }, appId: {

我找到的所有示例都有一个
query
顶级对象,然后是一个查询列表,然后返回类型以进行深入分析

由于我有大量的查询,我想将它们分组,这是我尝试的:

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.

我如何实现我想要的?我真的不想在所有查询前加前缀。

错误
query.myFirstGroup字段类型必须是输出类型,但得到:未定义。
表示您没有为
myFirstGroup
您必须使用
type
字段提供类型

myFirstGroup:{
类型:MyFirstGroupQuery,
解析:()=>MyFirstGroupQuery,
},

如果类型为
MyFirstGroupQuery
,则每个字段必须定义
类型,例如
GraphQLInt
GraphQLString
GraphQLID
,即使它是类似于
MyFirstGroupQuery的自定义类型

GraphQLSchema
构造函数中,您提供了
RootQuery
,即
QueryType
,它是
GraphQLSchema
它只接受带有
GraphQLObjectType
RootQuery
,其字段必须定义
type

GraphQL严格基于类型,您声明的每个字段都必须定义
类型

GraphiQL


错误
query.myFirstGroup字段类型必须是输出类型,但得到:未定义。
表示您尚未为
myFirstGroup
您必须使用
type
字段提供类型

myFirstGroup:{
类型:MyFirstGroupQuery,
解析:()=>MyFirstGroupQuery,
},

如果类型为
MyFirstGroupQuery
,则每个字段必须定义
类型,例如
GraphQLInt
GraphQLString
GraphQLID
,即使它是类似于
MyFirstGroupQuery的自定义类型

GraphQLSchema
构造函数中,您提供了
RootQuery
,即
QueryType
,它是
GraphQLSchema
它只接受带有
GraphQLObjectType
RootQuery
,其字段必须定义
type

GraphQL严格基于类型,您声明的每个字段都必须定义
类型

GraphiQL


你的意思是像你在
GraphQLSchema
中声明的
querytype
你的意思是像你在
GraphQLSchema
中声明的
querytype
谢谢!这个类型在
GraphQLSchema
中被省略的事实让我大吃一惊!谢谢这个类型在
GraphQLSchema
中被省略的事实让我大吃一惊!
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;