You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS 12.3.1静态路由跳转请求无效JSON文件返回404错误

解决Next.js 12.3.1 SSG页面跳转404问题

核心问题定位

从请求路径[pid].json和undefined.json来看,问题根源是动态路由参数pid未被正确传递或解析,导致Next.js无法找到预生成的对应静态数据文件。

具体修复步骤

1. 校验uri变量的有效性

  • 在渲染<Link>的位置打印uri值,确认它是预期的新闻ID(如具体字符串/数字),而非undefined或[pid]这类无效值。
  • 若uri来自异步数据请求,确保数据加载完成后再渲染组件,避免初始渲染时变量未赋值。

推荐使用Next.js官方的对象式href写法,避免字符串拼接可能引发的解析错误:

<Link href={{
  pathname: '/news/[pid]',
  query: { pid: uri }
}}>
  <a className="button">Read</a>
</Link>

这种方式能让Next.js精准解析动态路由参数,避免生成错误的/_next/data请求路径。

3. 检查getStaticPaths与getStaticProps配置

确保news/[pid].js页面文件中:

  • getStaticPaths正确生成所有需预渲染的pid路径:
export async function getStaticPaths() {
  // 从数据源获取所有新闻ID
  const newsList = await fetch('你的新闻数据源').then(res => res.json());
  const paths = newsList.map(item => ({
    params: { pid: item.id.toString() }
  }));

  return {
    paths,
    fallback: false // SSG模式下建议设为false,确保所有路径预生成
  };
}
  • getStaticProps正确接收pid参数并生成对应静态数据,保证部署后服务器上存在/_next/data/.../news/[对应pid].json文件。

4. 重新构建部署

清除本地构建缓存后重新构建:

rm -rf .next && npm run build

将新的构建产物(.next目录及静态文件)重新部署到服务器,确保静态数据文件为最新版本。

额外检查项

  • 确认服务器静态文件配置允许访问/_next/data目录下的JSON文件,未被路由规则拦截。
  • 若使用自定义服务器(如Express),确保路由规则正确转发SSG页面请求,不干扰Next.js静态资源加载。

内容的提问来源于stack exchange,提问作者Lanil Marasinghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:57:24