如何清除 NextJs GetStaticPaths 缓存/“取消发布”动态路由?

Ale*_*ffe 7 typescript contentful next.js

我认为这是一个非常普通的问题,但我在谷歌上找不到任何东西。

我正在学习 NextJs(使用 TypeScript)并且我有一个站点成功地使用动态路由、SSR 和增量再生,所有设置和部署到 Vercel。这是我的动态路由处理程序中的GetStaticPropsGetStaticPaths代码示例:

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,
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我请求在构建时间后在 cms 中发布的路径,它会成功地在服务器上重新生成并返回页面。

到现在为止还挺好。

但是,如果我在我的 CMS 中取消发布路由......它仍然由应用程序返回,除非我重建和重新部署(或以其他方式导致进程在开发中重新启动)。

所以我的问题是:如何动态地使 NextJs 从其 GetStaticPaths 缓存中删除动态路由?

我知道GetStaticProps由于revalidate配置的原因,最多每 10 秒调用一次。但据我所知,GetStaticPaths只有当请求来自当前未缓存的路由时才会被调用(?)

换句话说,对于与无头 CMS 的集成,如何在不触发重建/部署的情况下支持使用 NextJs 取消发布或重命名页面?

提前致谢!

apr*_*ion 0

我面临着一个类似但不同的问题:部署我的项目从数据生成 URL,但当数据库中的数据更改时我无法添加任何新 URL。

我的问题的关键是我在 getStaticPaths 方法中将后备设置为 false。当我将其设置为 true 时,生产部署开始表现得像我的本地开发构建。

我发现您正在为后备属性传递一个字符串值。您可以尝试使用布尔值,如下所述: https: //nextjs.org/docs/basic-features/data-fetching#the-fallback-key-required