在GraphQL中将数组作为参数传递

时间:2016-11-16 08:04:55

标签: node.js facebook 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}
  ]
}
  }
   });

AND查询如下:

  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 个答案:

答案 0 :(得分:2)

我最近做了一些非常相似的事情。您的输入参数不需要保留与格式化要发送回的输出数据时相同的类型系统。所以你的arg只需要接受一个字符串或对象列表,或者你想要发送的任何标准类型。

在这种情况下,我更新它以接受字符串列表(数组)。

 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)
  }

快乐的编码!

答案 1 :(得分:1)

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)
}