我用Next.js编写Web应用程序,并将其托管在Github Pages上(这是一个外部约束,我个人会使用Vercel或其他东西)。
我有一个动态路由:webapp.com/experiments/[id]
。
每当用户创建实验时,ID需要动态生成,因此我无法预加载所有ID来构建静态页面。
重要的是这些页面能够动态生成,而无需重新构建/重新部署项目。
在localhost
上,我可以转到我的页面,它可以检索数据并将其显示在页面上。
然而,一旦我把它托管到Github Pages上,我可以点击页面,它就会加载,但是当我试图直接转到URL时,它给了我一个404。
我已经设置了getStaticPaths
和getStaticProps
,它构建了已知的页面,但当我去一个新的实验的URL,它仍然给我一个404。
我错过了什么?还有别的方法吗?
export async function getStaticPaths() {
// Fetch initial list of experiment IDs from your database
const experimentIds = await fetchExperimentUrls();
// Generate paths for static generation
const paths =
experimentIds.urls.map((url: string) => ({
params: { url: url.toString() },
}));
return {
paths,
fallback: true,
};
}
export async function getStaticProps({ params }: any) {
const { url } = params;
const res = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/experiments/${url}`,
{
method: "GET",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
const experimentProps = await res.json();
return {
props: {
experimentProps,
},
revalidate: 60, // Optional: Set a revalidation time (in seconds) to update the static page
};
}
2条答案
按热度按时间kmbjn2e31#
我在评论的时候漏掉了你问题的一个重要部分。你正在动态渲染一些页面,但是你正在部署静态资产。Github Pages不运行Next服务器,它假设你正在部署静态页面(所有的,已经建立)。对于托管在gh-pages上的网站来说,没有办法动态地从服务器端获取数据,因为没有服务器。如果获取新的实验是一个要求,您需要将应用托管在VPS或云提供商上。
jhiyze9q2#