你如何正确使用GraphQLList和GraphQLInterfaceType?

时间:2016-04-23 18:03:44

标签: javascript graphql

我开始使用GraphQL。我试图将数据解析为GraphQL类型。我不明白为什么以下不起作用。

鉴于此数据:

{
    "kind": "youtube#searchListResponse",
    "etag": "\"CuSCwMPVmgi8taDtE2LV6HdgkN0/USvbH1nSht52L3y8EP6BIwVRhgM\"",
    "items": [{
        "kind": "youtube#searchResult",
        "etag": "\"CuSCwMPVmgi8taDtE2LV6HdgkN0/xpywjUARlQ0Ai4IucTvXRNCfTcE\"",
        "id": {
            "kind": "youtube#video",
            "videoId": "zvRbU1Ql5BQ"
        }
    }]
}

这是输入内容的代码。

const ItemType = new GraphQLInterfaceType({
  name: 'Item',
  fields: {
    kind: { type: StringType },
  },
});

const YoutubeDataType = new GraphQLObjectType({
  name: 'PublicYoutube',
  fields: {
    kind: { type: new GraphQLNonNull(StringType) },
    etag: { type: new GraphQLNonNull(StringType) },
      items: { type: new GraphQLList(ItemType) },  // returns null
    // items: { type: StringType }, // returns "[object Object]"... so it's being passed in
  },
});

这是通过GraphiQL返回的内容。为什么items等于null

{
  "data": {
    "publicyoutube": {
      "kind": "youtube#searchListResponse",
      "etag": "\"CuSCwMPVmgi8taDtE2LV6HdgkN0/OspGzY61uG9sSD_AWlfwkTBjG-8\"",
      "items": [
        null
      ]
    }
  },
  "errors": [
    {
      "message": "Cannot read property 'length' of undefined"
    }
  ]
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我误解了GraphQLInterfaceType的用途并且使用了错误的方法。它不应该使用GraphQLInterfaceType,而应该是GraphQLObjectType;

const ItemType = new GraphQLObjectType({
  name: 'Item',
  fields: {
    kind: { type: StringType },
  },
});

const YoutubeDataType = new GraphQLObjectType({
  name: 'PublicYoutube',
  fields: {
    kind: { type: new GraphQLNonNull(StringType) },
    etag: { type: new GraphQLNonNull(StringType) },
      items: { type: new GraphQLList(ItemType) },  // returns null
    // items: { type: StringType }, // returns "[object Object]"... so it's being passed in
  },
});

输出:

{
  "data": {
    "publicyoutube": {
      "kind": "youtube#searchListResponse",
      "etag": "\"CuSCwMPVmgi8taDtE2LV6HdgkN0/-aZNXBVLYOJwPMdleXmbTlJSo_E\"",
      "items": [
        {
          "kind": "youtube#searchResult"
        }
      ]
    }
  }
}