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

Next.js 13.4.19(App Router) not-found.js不显示404页面求助

解决Next.js 13.4.19 App Router下not-found.js不渲染空白页的问题

1. 确保not-found.js文件存在且位置正确

在项目app目录(或对应路由段目录)下创建/检查not-found.js文件,示例内容如下:

export default function NotFound() {
  return (
    <main className="container mx-auto p-4">
      <h1 className="text-2xl font-bold mb-2">404 - 页面不存在</h1>
      <p>你访问的页面不存在或无效,请检查路径后重试。</p>
    </main>
  )
}
  • 若仅处理tickets/[id]路由下的错误,可将not-found.js放在app/tickets/[id]/目录下;若要全局处理所有404场景,放在app/根目录即可。

2. 完善数据获取的错误处理逻辑

原代码仅处理了HTTP状态码非2xx的情况,未捕获网络异常、请求超时等其他错误,导致异常时无法触发notFound(),出现空白页。修改getTicket函数:

import { notFound } from "next/navigation"

async function getTicket(id) {
  try {
    const res = await fetch(`http://localhost:4000/tickets/${id}`, {
      next: {
        revalidate: 60
      }
    })

    if (!res.ok) {
      notFound()
    }

    return res.json()
  } catch (error) {
    // 捕获所有请求异常,触发404页面
    notFound()
  }
}

export default async function TicketDetails({ params }) {
  const ticket = await getTicket(params.id)

  return (
    <main>
      <nav>
        <h2>Ticket Details</h2>
      </nav>
      <div className="card">
        <h3>{ticket.title}</h3>
        <small>Created by {ticket.user_email}</small>
        <p>{ticket.body}</p>
        <div className={`pill ${ticket.priority}`}>
          {ticket.priority} priority
        </div>
      </div>
    </main>
  )
}

3. 排查开发环境缓存问题

如果修改后仍未生效,尝试:

  • 重启Next.js开发服务器
  • 删除项目根目录下的.next文件夹后重新启动服务

内容的提问来源于stack exchange,提问作者S Anwar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:18:33