Gatsby build / createPages: обработка ошибок - PullRequest
0 голосов
/ 21 апреля 2020

Я использую gatsby для создания очень большого сайта (5k + страниц, 300k + изображений). Исходные данные ненадежны (например, поля часто отсутствуют), что приводит к ошибкам во время процесса createPage.

Проблема заключается в том, что если один прогон createPage выдает ошибку, то полностью сборка не удалась. Так что иногда 5k страниц создаются успешно, а затем происходит сбой из-за одной ошибки.

Я пытался обернуть создание страницы в try...catch, но это не имело значения:

      try {
        createPage({
          path: node.slug,
          component: path.resolve(`./src/templates/BlogPost.js`),
          context: {
            id: node.id,
          },
        });
      } catch (error) {
        console.log(error);
      }

( Я также попытался проверить данные на уровне компонента и вернуть null, если он не завершен, но createPage все еще создает (пустую) страницу, и я не хочу этого: Я просто хочу, чтобы страница была пропущены, если данные неверны ?

Обратите внимание, это почти дубликат этого вопроса , но решение там не работает для меня: я не могу отобразить страницу с ошибкой в ​​случае неверных данных Мне нужно, чтобы страница была полностью пропущена, если это вообще возможно

1 Ответ

4 голосов
/ 21 апреля 2020

Вы должны явно определить схему GraphQL для ваших исходных данных: https://www.gatsbyjs.org/docs/schema-customization/#creating -type-definitions

Таким образом, вызов GraphQL не вернет ошибку, но null при отсутствии поля на узле. Затем вы можете проверить эти ложные значения и пропустить вызов createPage.

Например, в моей теме я явно определяю схему GraphQL для типа Page: https://github.com/LekoArts/gatsby-themes/blob/567858957ca484aef8114a7d0b8e4f14df0c8a00/themes/gatsby-theme-minimal-blog-core/gatsby-node.js#L90 -L96

https://github.com/LekoArts/gatsby-themes/blob/567858957ca484aef8114a7d0b8e4f14df0c8a00/themes/gatsby-theme-minimal-blog-core/gatsby-node.js#L111 -116

И если конечный пользователь не создал ни одной страницы (путем создания файлов внутри содержимого / страниц ) запрос вернет null, и я могу проверить это: https://github.com/LekoArts/gatsby-themes/blob/567858957ca484aef8114a7d0b8e4f14df0c8a00/themes/gatsby-theme-minimal-blog-core/gatsby-node.js#L337 -L347

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