使用gatsby-transformer-json手动定义模式

时间:2018-02-17 20:28:59

标签: graphql gatsby

我有两个现有的JSON文件,一个包含位置信息和其他帖子信息,其中包含位置和帖子ID:

locations.json

[
  {
    "locationId": "location-id-1",
    "name": "name-2",
    "posts": ["post-id-1", "post-id-2"]
  },
  {
    "locationId": "location-id-2",
    "name": "name-2",
    "posts": ["post-id-3", "post-id-4", "post-id-5"]
  },
  // ...
]

posts.js

[
  {
    "postId": "post-id-1",
    "title": "some-title-1",
    "locationId": "location-id-1",
    "text": "..."
  },
  {
    "postId": "post-id-2",
    "title": "some-title-2",
    "locationId": "location-id-1",
    "text": "..."
  },
  // ...
]

我正在使用gatsby-transformer-json,这允许我使用allLocationsJsonallPostsJson创建GraphQL查询。但是,我不知道如何更改GraphQL架构以允许这样的查询:

{
  allLocationsJson {
    edges {
      node {
        locationId
        name
        posts {
          postId
          title
          text
        }
      }
    }
  }
}

问题来自posts字段,因为GraphQL没有意识到我希望posts成为帖子对象的列表,而不仅仅是帖子ID。有没有办法让我用现有的JSON结构完成这种查询?

1 个答案:

答案 0 :(得分:2)

Gatsby会处理以___NODE结尾的特殊字段。当Gatsby为这些字段创建模式时,它会将它们转换为其他类型的链接。因此,如果您将locations.json上的posts字段重命名为posts___NODE,那么您将能够根据需要查询数据。