Gatsby sourceNode не работает с аргументами GraphQL - PullRequest
2 голосов
/ 07 апреля 2020

В настоящее время я пытаюсь извлечь некоторые данные из API и добавить их в GraphQL, используя API-интерфейсы sourceNode и createNode, например:

exports.sourceNodes = async ({ actions, createNodeId, createContentDigest }) => {
const modules = ['data', 'stuff', 'bananas'];
const modulesResponse = Promise.all(modules.map(async (module) => getModuleData(module)));
const modulesData = await modulesResponse;

const content = Object.fromEntries(modules.map((entries, index) => [entries, modulesData[index]]));

actions.createNode({
    id: createNodeId(modules.join(',')),
    parent: null,
    children: [],
    content,
    internal: {
        type: 'myData',
        mediaType: 'text/html',
        contentDigest: createContentDigest(content)
    }
});

Когда я пытаюсь отфильтровать это (используя GraphiQL) с аргументами, это не кажется, что работает:

{
  myData(content: {data: {elemMatch: {filterEntry: {eq: "foo"}}}}) {
    content {
      data {
        filterEntry
      }
    }
  }
}

Это приводит к этому:

{
  "data": {
    "myData": {
      "content": {
        "data": [
          {
            "filterEntry": "foo"
          },
          {
            "filterEntry": "bar"
          },
          {
            "filterEntry": "baz"
          }
        ]
      }
    }
  }
}

1 Ответ

1 голос
/ 09 апреля 2020

Так что я нашел решение для этого. Проблема заключается в том, что данные для фильтрации являются записью объекта содержимого. Это означает, что они не имеют NodeId и не фильтруются. Решение состоит в том, чтобы добавить запись action.createNode foreach, поступающую из API, вместо того, чтобы просто добавить объем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...