Как очистить кеш NextJs GetStaticPaths / отменить публикацию динамического маршрута?

Я думаю, что это довольно банальный вопрос, но я ничего не могу найти в Google.

Я изучаю NextJs (используя TypeScript), и у меня есть сайт, успешно работающий с динамическими маршрутами, SSR и добавочной регенерацией, все настроено и развернуто на Vercel. Вот пример кода GetStaticProps и GetStaticPaths в моем обработчике динамического маршрута:

export const getStaticPaths: GetStaticPaths = async () => {
    const routes = new CmsHelper().GetRoutes();

    const paths = (await routes).items.map((item, index, items) => {
        return item.fields.urlPath;
    })

    return {
        paths: paths,
        fallback: 'blocking',
    };
}

export const getStaticProps: GetStaticProps = async (context) => {
    const urlParts = context.params?.url as string[] || [];
    const urlPath = `/${urlParts.join('/')}`;
    const article = await new CmsHelper().GetArticle(urlPath);
    return {
        props: {
            article
        },
        revalidate: 10,
    }
}

Если я запрашиваю новый путь, который был опубликован в cms после времени сборки, он успешно регенерируется на сервере и возвращает страницу.

Все идет нормально.

Однако, если я отменяю публикацию маршрута в своей CMS ... он все равно возвращается приложением, если я не перестрою и не разверну (или не перезапущу процесс другим способом в dev).

Итак, мой вопрос: как мне динамически заставить NextJs удалить динамический маршрут из своего кеша GetStaticPaths?

Я понимаю, что GetStaticProps будет вызываться не чаще одного раза в 10 секунд из-за конфигурации revalidate. Но насколько мне известно, GetStaticPaths будет вызываться только в том случае, если запрос приходит с маршрута, который в настоящее время не кэшируется (?)

Другими словами, для интеграции с автономной CMS, как я могу поддерживать отмену публикации или переименование страниц с помощью NextJ, не вызывая повторной сборки / развертывания?

Заранее спасибо!


person Alex Norcliffe    schedule 01.01.2021    source источник


Ответы (1)


Я столкнулся с похожей, но другой проблемой: развертывание моего проекта сгенерировало URL-адрес из данных, но я не мог добавить какие-либо новые URL-адреса при изменении данных в базе данных.

Ключ к моей проблеме был в том, что я устанавливал откат на false в моем методе getStaticPaths. Когда я установил для него значение true, производственное развертывание начало вести себя как моя локальная сборка разработки.

Я вижу, что вы передаете строковое значение для своего запасного свойства. Вы можете попробовать использовать логическое значение, как описано здесь: https://nextjs.org/docs/basic-features/data-fetching#the-fallback-key-required

person aproximation    schedule 03.03.2021
comment
Фактически: проверьте revalidate: 1, возвращенный getStaticProps. - резерв: true исправляет новые URL-адреса - revalidate: 1 исправляет старые URL-адреса - person aproximation; 03.03.2021