当前位置: 首页 > 知识库问答 >
问题:

如何清除/删除NextJs缓存?

璩华辉
2023-03-14

我在/products/[slug]上有一个产品页面。js

我对wordpress/graphql站点使用增量静态生成:

export async function getStaticProps(context) {

    const {params: { slug }} = context

    const {data} = await client.query(({
        query: PRODUCT_SLUG,
        variables: { slug }
    }));

    return {
        props: {
            categoryName: data?.productCategory?.name ?? '',
            products: data?.productCategory?.products?.nodes ?? []
        },
        revalidate: 1
    }

}

export async function getStaticPaths () {
    const { data } = await client.query({
        query: PRODUCT_SLUGS,
    })

    const pathsData = []

    data?.productCategories?.nodes && data?.productCategories?.nodes.map((productCategory) => {
        if (!isEmpty(productCategory?.slug)) {
            pathsData.push({ params: { slug: productCategory?.slug } })
        }
    })

    return {
        paths: pathsData,
        fallback: true,
    }
}

除了一件事,一切都按预期进行。如果我从wordpress中删除一个以前发布的产品,NextJs服务于缓存的页面,而不是显示404-未找到页面,我认为这是它应该如何工作,这意味着如果某些东西没有重建,显示以前的(陈旧的)页面。

但是,如何才能完全删除已删除的特定产品的缓存,而该缓存不会再次从product\u SLUGS查询中获取?

我已经阅读了回退选项:真、假、阻塞,但它们似乎都不起作用。

有没有解决这个问题的方法,或者是next.config.js配置,或者是其他方法?

共有1个答案

郜光明
2023-03-14

所以我遇到了同样的问题,尽管我使用的是GraphCM。因此,以下是您需要执行的修复操作:

    export async function getStaticProps(context) {
    const {params: { slug }} = context

    const {data} = await client.query(({
        query: PRODUCT_SLUG,
        variables: { slug }
    }));

    if (!data) {
        return {
            notFound: true
        }
    } else {
        return {
            props: {
                categoryName: data?.productCategory?.name ?? '',
                products: data?.productCategory?.products?.nodes ?? []
            },
            revalidate: 1
        }
    }
}

您需要在getStaticProps

notFound-一个可选的布尔值,允许页面返回404状态和页面。

请参阅文档中的此页https://nextjs.org/docs/basic-features/data-fetching#getstaticprops-静态生成

然后在getStaticPaths中将fallback更改为fallback:“阻塞”。如果您保持fallback:true,它将提供过时的页面,因为该页面已成功构建。

 类似资料:
  • 我使用Drupal 7最新的开发版本。 我已经安装了清漆和过期模块并设置它们。它们工作得很好,但是我有一个关于从清漆中删除缓存的问题。 问题是如何只删除索引(主页)页面的清漆缓存,而不删除其他页面的缓存。我看了清漆日志,发现每次Drupal执行命令时,整个清漆缓存都被删除了 此命令由varnish模块或expire模块执行,它表示删除主页(索引)页的缓存。但正如我看到的,它正在删除varnish中

  • 问题内容: 我使用nginx作为前端服务器,我修改了CSS文件,但是nginx仍在使用旧文件。 我试图重新启动nginx,但没有成功,我已经用Google搜索,但是找不到清除它的有效方法。 一些文章说我们只能删除缓存目录:,但是我的服务器上没有这样的目录。 我现在该怎么办? 问题答案: 我遇到了完全相同的问题-我在Virtualbox中运行了Nginx。我没有打开缓存。但是看起来像已经设置好了,这

  • 问题内容: 我在项目中经常使用AlamofireImage,并且使用 从我的CDN获取图像。我已经做了一些测试,但是如果我错了,请纠正我,这似乎会将下载的图像存储到缓存中。我的测试包括下载5mb的图片。第一次大约花了20秒,第二次是瞬间。 我想知道的是如何清除特定URL /图像的缓存并重新下载图像? 例如,我更新了用户个人资料照片。图像名称/ URL会完全相同,但是我知道图像会随着用户从库或相机中

  • 我正在尝试使用Android Studio,第一次启动它,需要45分钟来编译...如果我不退出应用程序,那也没关系--每次后续编译/运行应用程序大约需要45秒。 我试着检查了我的一些缓存:在我的主目录中有一个文件夹,它包含123 MB。 我的项目文件夹中还有文件夹...其中一个大小为200 MB。我不敢随便用核弹攻击他们两个。删除文件夹的哪些部分是安全的? 有没有更好的解释为什么我的Android

  • 问题内容: 部署网站的新版本时,我需要清除所有APC缓存条目。APC.php有一个用于清除所有操作码缓存的按钮,但我看不到用于清除所有用户条目,所有系统条目或所有按目录条目的按钮。 是否可以通过命令行或其他方式清除所有缓存条目? 问题答案: 您可以使用PHP函数。 调用将清除系统缓存,而调用将清除用户缓存。

  • 我正在用Ionic Cordova项目开发一台iMac电脑。我将github帐户上的一个插件克隆到自己的repo中,并将该插件安装到一个带有ionic cordova插件add的ionic应用程序中https://github.com/axelcostaspena/MobileSDK-Cordova 。现在,每次我尝试使用ionic cordova plugin add@selligent mar

  • js import() 如何清除缓存?我有个需求需要动态导入一些js脚本,使用import()导入默认会有缓存,会有很大影响,如何才能实现每次导入的时候清除缓存? 加时间戳的方式其实我刚开始也试了,但使用的第一种方式,这种就会报错,但是我改成方式二,就可以,真奇怪,没有大佬能解释一下这个原因?使用的是vite

  • void clear_cache(string template [, string cache id [, string compile id [, int expire time]]]) This clears the cache for a specific template. If you have multiple caches for this template, you can cl