next.js 下一个js静态路径回退:true,则不生成在生成后创建的新页

de90aj5v  于 2022-12-18  发布在  其他
关注(0)|答案(1)|浏览(81)

我遇到了使用getStaticPathsgetStaticProps生成博客页面的情况,现在,由于我们希望创建新页面并在网站上提供这些页面,而无需重新启动服务器,我尝试在getStaticPaths中启用fallback

export async function getStaticPaths() {
  const paths = ...code to get paths...

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

然后在getStaticProps

export async function getStaticProps({ params }) {
  try {
    const post = await fetchPost(...someid...);

    return {
      props: {
        post
      },
      revalidate: 60
    };
  } catch (e) {
    return {
      notFound: true
    };
  }
}

到目前为止一切顺利!
如果我运行yarn build,然后运行yarn start,用/somenewslug创建一个新页面,然后我尝试打开该页面,它就会生成!Woohoo!到目前为止一切顺利。
然而,有一个边缘的情况下,我不知道如何处理。
边缘情况是,如果我尝试打开/somenewslug在实际页面创建之前,那么当页面不存在时,getStaticProps将返回notFound(这是正确的!对于这个时间点),当我在此之后创建页面时,它将不工作,它将一直给我404,并且不尝试重新获取它,但页面现在存在。
我也试过将X1 M11 N1 X与X1 M12 N1 X一起添加(不知道这是否可行),但它没有改变任何东西。
我正在处理的后备:

const SlugPage: NextPage<any> = props => {
  const theme = useTheme();
  const router = useRouter();

  if (router.isFallback)
    return (
      <Loader
        colors={{
          backgroundColor: theme.colors.earth.second,
          color: theme.colors.earth.fifth
        }}
        loading={true}
      />
    );

    ...rest of normal page...

hc8w905p

hc8w905p1#

答案是将revalidatenotFound一起使用。

export async function getStaticProps({ params }) {
  try {
    const post = await fetchPost(...someid...);

    return {
      props: {
        post
      },
      revalidate: 60
    };
  } catch (e) {
    return {
      notFound: true,
      revalidate: 60
    };
  }
}

相关问题