Прервать создание указанной c страницы в Гэтсби JS - PullRequest
2 голосов
/ 22 февраля 2020

Я создаю сайт с тысячами страниц на основе одного и того же шаблона, используя Gatsby JS. Чтобы сгенерировать все эти страницы, я звоню во внешние службы, чтобы получить данные для их заполнения.

Моя проблема в том, что иногда эти вызовы не выполняются, но, возможно, только для одной из 1500 страниц.

Можно ли прервать генерирование указанной страницы c, которая не удалась, поэтому она не генерируется, и я могу безопасно развернуть другие, не переопределяя ту, которая не удалась?

Я пытался использовать onCreatePage но без везения.

1 Ответ

1 голос
/ 22 февраля 2020

Вот аналогичный вопрос , на который я отвечал ранее.

Можно ли прервать генерацию указанной c страницы, которая не удалась, поэтому она не сгенерирована

Да. Вы можете сделать это в gatsby-node.js:

const path = require(`path`)
exports.createPages = ({ graphql, actions }) => {
  const { createPage, deletePage } = actions
  const template = path.resolve(`src/templates/template.js`)

  return graphql(`
    // your query
  `, { limit: 10000 }).then(result => {
    if (result.errors) {
      throw result.errors
    }

    result.data.allMarkdownRemark.edges.forEach(edge => {
    // ##### Abort page generation HERE #######
    // Find a graphQL attribute that is undefined or null only when your call fails
    // I use callSuccess as an example. It could be the frontmatter or whatever

    if (edge.callSuccess != null) { // Only generate a page when the call is successful
      createPage({
        path: `${edge.node.frontmatter.slug}`,
        component: template ,
        context: {},
      })
    }
    deletePage(page); // otherwise delete page
  })
}

, и я смогу безопасно перераспределить остальные, не переопределяя отказавший?

Нет простого способа это. Гэтсби перестраивает все страницы с каждой сборкой. Я не в курсе получения страниц предыдущих сборок. Возможно, есть способ снова запросить вашу внешнюю службу и получить данные таким образом.

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