Есть ли способ повторно проверить все пути, используя повторную проверку по запросу для ISR в Next.js?

У нас есть сайт Next.js, который в значительной степени зависит от ISR (инкрементная статическая регенерация) и использует веб-хуки для повторной проверки определенных страниц по запросу, когда их содержимое изменилось в нашей CMS.

Однако мы также хотим сохранить некоторые данные по сайту в нашей CMS. В частности, мы хотим, чтобы наша CMS была источником правды для нашего навигационного заголовка и для глобального баннера сообщений, который может время от времени показывать специальные уведомления. (т.е. «Мы сегодня закрыты, это особый праздник»)

Если какая-либо из этих «всеобщих» вещей изменится в CMS, нам потребуется повторно проверить каждый отдельный путь. Есть ли способ сделать это, не пытаясь самостоятельно отслеживать каждый потенциальный путь и явно вызывая для них повторную проверку? Вроде бы фреймворк должен нам тут помочь, но я не могу найти никакого механизма, который бы перевалидировал все сразу.

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

Спасибо

1 ответ

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

      async function revalidateAllPages() {
  const pagesDirectory = path.join(process.cwd(), 'pages');
  const pageFiles = await fs.readdir(pagesDirectory);

  for (const file of pageFiles) {
    if (file.endsWith('.js') && file !== 'revalidate-all.js') {
      const pagePath = path.join(pagesDirectory, file);
      const { revalidate } = await getStaticProps();

      // Trigger revalidation for each page by accessing its URL
      await fetch(`https://your-website.com/${file.replace('.js', '')}`);
    }
  }
}
Другие вопросы по тегам