Можно ли пропустить создание страницы во время сборки, если эта страница в конечном итоге выдается во время рендеринга?
Эта страница создана программно через gatsby-node createPage
и возможно, что данные из запроса страницы (из нашей CMS) являются плохими, вызывая их выброс.
Я не хочу останавливать сборку из-за одной плохой страницы, поэтому в идеале страница не должна создаваться или резервная страница будет помещен на свое место (и сообщение об ошибке будет записано в Sentry или подобное).
Любые идеи о том, как этого добиться?
Редактировать: Я не уточнил моего вопроса достаточно, поэтому я хотел добавить некоторый контекст о том, какую проблему я пытаюсь решить и почему.
Ошибка, которую я пытаюсь уловить, возникает во время рендеринга страницы во время сборки. Эта ошибка возникает из-за того, что компонент, который я пытаюсь отобразить, предполагал что-то о данных, которые не соответствуют действительности (но должны быть истинными).
Например, допустим, я создаю много страниц для все продукты на моем сайт. Компонент ожидает, что каждый продукт имеет imagesSizes
и вызывает imagesSizes.split(',')
во время рендеринга. Поскольку imagesSizes
- это null
из запроса страницы , весь компонент выдает ошибку и прерывает сборку.
Как и предложил @EliteRaceElephant, Я пытался использовать React Error Boundaries и, к сожалению, они не работают для SSR (который используется Gatsby во время сборки). Таким образом, даже если я заверну свой компонент в границу ошибки, он все равно будет нарушать сборку.
Последнее замечание, приведенный выше пример - только одна из ситуаций, в которых я сталкиваюсь, когда данные плохие и ломает сборку.
Я пытаюсь достичь простой резервной страницы, когда происходит любая произвольная ошибка во время рендеринга во время сборки . Мое идеальное решение даже позволяло бы мне throw
делать ошибки намеренно, когда определенные предположения, которые я делаю в отношении данных, не соответствуют действительности (потому что я бы скорее отправил пользователю страницу с ошибкой, чем показывал бы им страницу с неверными данными).
Исторически, когда я делал SSR за пределами Гэтсби, я просто упаковывал весь вызов в ReactDOMServer.renderToString
в блоке try
catch
и просто возвращал свою резервную страницу в catch
block.
Что такое эквивалент Гэтсби?