Схема GraphQL из единого объекта JSON-файла в Gatsby - PullRequest
0 голосов
/ 16 мая 2018

Так что я бы хотел запросить один файл JSON, который не является массивом из GraphQL Гэтсби, но я не знаю, как это сделать.

Насколько я понимаю gatsby-transformer-json документы -он поддерживает только загрузку массивов и делает их доступными через allFileNameJson схему.

Мои gatsby-config плагины (только необходимые для этого вопроса):

{
  resolve: 'gatsby-source-filesystem',
  options: {
    name: 'data',
    path: `${__dirname}/src/data`
  }
},
'gatsby-transformer-json'

А потом, скажем, вsrc/data У меня есть файл something.json, например:

{
  "key": "value"
}

Теперь я хотел бы запросить данные из файла something.json, но нет схемы somethingJson, которую можно запросить (попробовал с Gatsby's GraphiQL).

Может кто-нибудь указать, что я делаю неправильно или как я могу решить эту проблему?

1 Ответ

0 голосов
/ 16 мая 2018

Хорошо, поэтому можно запрашивать файлы с одним объектом, если у них есть родительский элемент (папка).

Давайте возьмем эти параметры:

  • gatsby-source-filesystem настроен на src/data
  • test.json расположен на src/data/test.json с содержанием { "key": "value" } в нем

Теперь, поскольку у файла test.json действительно есть родительский элемент (папка data), вы можете запросить поля из test.json следующим образом:

{
  dataJson {
    key
  }
}

Но помещать их непосредственно в корневую папку - плохая практика, потому что, когда вы сохраните другой файл json, например secondtest.json с содержимым { "key2": "value2" }, и запросите его тем же запросом, что и выше, вы получите данные только с одного узла (не уверен, что он занимает первый или последний встреченный узел),

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

Например, у вас есть данные "Обо мне":

  1. создайте папку about в вашем src/data
  2. создать файл index.json с т. Е. { "name": "John" }
  3. запрос ваших данных

Как это:

{
  aboutJson {
    name
  }
}

Вот и все.

...