GraphQL没有对象类型?

时间:2018-12-17 13:16:18

标签: graphql apollo apollo-server

我已经阅读了所有内容,没有任何解决方案和具体解释(即使在这里:Apollo / GraphQl - Type must be Input type

我想创建一个包含Sun的对象系统。所以我这样做:

  type System {
   _id: ID
   name: String! @unique
   diameter: Int
   suns: [Sun]
  }

  type Sun {
   _id: ID
   name: String
   diameter: Int
  }

  type Mutation {
   createSystem(name: String!, diameter: Int, suns: [Sun]): System!
  }

我在操场上写道:

mutation {
  createSystem(name:"new system", suns: [{ name: "John" }]) {
    name
    suns
  }
}

但是我遇到了一个终端错误:“错误:Mutation.createSystem(suns :)的类型必须为Input Type,但得到:[Sun]。”

我知道没有收到Sun作为对象。如何将其声明为对象?

非常感谢您的回答

2 个答案:

答案 0 :(得分:1)

GraphQL规范。不允许使用type(即输出类型)作为输入参数。仅允许输入参数为enumScalarInput。这意味着您必须创建一个SunInput

input SunInput {
   _id: ID
   name: String
   diameter: Int
}

答案 1 :(得分:0)

您需要使用其自己的解析器为sun设置自定义“类型”。

suns: { type: new GraphQLList(SunType) } // just an example

mutation {
  createSystem(name:"new system", suns-names: "John") {
    name
  }
}

它将具有将新系统写入数据库的解析器,称为新系统,例如,将“ SunType”的sun添加到名为“ Sun”的数据库集合中。