Next.js App Router:返回403/500等错误的正确方式是什么?
App Router 无自定义错误页时的常见错误处理方案
直接抛出错误触发默认错误页
在App Router的服务器组件、页面组件或路由处理逻辑中,无需返回JSON响应,直接抛出Error实例即可触发Next.js内置的默认错误页,效果和Pages Router的默认错误页一致:// 500错误示例(服务器/页面组件中) throw new Error('Internal Server Error');对于404错误,推荐使用Next.js提供的
notFound()函数,这会直接渲染默认的404页面:import { notFound } from 'next/navigation'; // 在需要触发404的逻辑中调用 notFound();403权限错误可以直接抛出明确的错误信息,同样会触发默认错误页:
throw new Error('权限不足,无法访问该资源');区分API路由与页面路由的错误逻辑
- 页面路由:所有渲染阶段的错误,直接抛出错误就能触发页面级默认错误页,不要用
NextResponse.json返回,否则只会返回JSON数据而不触发页面跳转。 - API路由:如果是给前端接口返回错误状态,使用
NextResponse.json带状态码是合理的,但这属于接口响应,不会触发页面级错误页;如果是API路由内部的渲染错误,同样直接抛出错误即可。
- 页面路由:所有渲染阶段的错误,直接抛出错误就能触发页面级默认错误页,不要用
客户端组件的错误处理
在客户端组件中,直接抛出错误,Next.js会自动捕获并展示默认错误界面,无需额外编写自定义错误边界组件。
内容的提问来源于stack exchange,提问作者Sodi Kroehler
相关产品推荐
相关产品推荐

