Есть ли способ повторно проверить все пути, используя повторную проверку по запросу для 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', '')}`);
}
}
}