2016-11-16 4 views
4

Я начал работать с GraphQL. Моя схема содержит также один элемент списка.Передача массива в качестве аргумента в GraphQL

Ниже приводится код моей схемы:

var userType = new graphql.GraphQLObjectType({ 
name: 'user', 
fields: function() { 
    return { 
    _id: { 
    type: graphql.GraphQLID 
    }, 
    name: { 
    type: graphql.GraphQLString 
    }, 
    age: { 
    type: graphql.GraphQLString 
    }, 
    degrees:[ 
    {type:graphql.GraphQLList} 
    ] 
} 
    } 
    }); 

И запрос выглядит следующим образом:

var QueryType = new graphql.GraphQLObjectType({ 
    name: 'Query', 
    fields:() => ({ 
    userArr: { 
     type: new graphql.GraphQLList(userType), 
     args:{ 
     degrees:{type:new graphql.GraphQLList(userType)} 
     }, 
    resolve: function(source, args) { 
     console.log(args); 
     resolve(args); 
     } 
    } 
}) 
}) 

Я получил эту ошибку. enter image description here

В основном мне нужно отправить массив из запроса клиента graphql и задать запрос, который я не могу достичь. Любые предложения, потому что я не могу найти справку по этой проблеме.

ответ

2

Я сделал что-то очень похожее недавно. Входные аргументы не нужно хранить в том же типе, что и при форматировании вывода данных для отправки. Поэтому ваш аргумент просто должен просто принять список строк или объектов или любой другой тип стандартного типа, который вы хотите отправить.

В этом случае я обновил его, чтобы принять список (массив) строк.

var QueryType = new graphql.GraphQLObjectType({ 
    name: 'Query', 
    fields:() => ({ 
    userArr: { 
     type: new graphql.GraphQLList(userType), 
     args:{ 
     degrees:{type:new graphql.GraphQLList(graphql.GraphQLString)} 
     }, 
    resolve: function(source, args) { 
     console.log(args); 
     resolve(args); 
     } 
    } 
}) 
}) 

Кроме того, я заметил, что у вашего пользователя есть градусы, окруженные скобками массива. Как и ваш аргумент ввода градусов, вы будете выводить массив строк. Попробуйте что-то вроде этого:

degrees:{ 
    type:new graphql.GraphQLList(graphql.GraphQLString) 
    } 

Счастливого кодирования!

+0

Я попробовал это тоже сейчас он дает эту ошибку. ** Тип поля user.degrees должен быть Тип вывода, но получил: undefined. ** –

+0

Можно ли подтвердить, что код в userType верен или нет? –

+0

Gotcha, не могли бы вы опубликовать свой пользовательский тип? просто отредактируйте свое оригинальное сообщение и опубликуйте gythub gist code snippit, если он большой – Justin

0

GraphQLObjectType не является допустимым типом ввода.

См Mutations and Input Types

«Типы входов не могут иметь поля, которые другие объекты, только основные скалярные типы, типы списков и другие типы ввода.»

Вы можете использовать предложение выше, потому что GraphQLString является скаляром

degrees:{ 
    type:new graphql.GraphQLList(graphql.GraphQLString) 
} 

В противном случае, вам нужно будет определить GraphQLInputObjectType

const userInputType = new GraphQLInputObjectType({ 
    name: 'userInput', 
    fields: { /* put your fields here */ } 
}); 
/* some code in between */ 

degrees:{ 
    type:new graphql.GraphQLList(userInputType) 
} 
Смежные вопросы