错误处理指南
错误可分为两类:预期错误 和 未捕获异常。本文将指导您如何在 Next.js 应用中处理这些错误。
处理预期错误
预期错误是指在应用正常运行过程中可能发生的错误,例如来自服务端表单验证的错误或失败的请求。这些错误应被显式处理并返回给客户端。
服务端函数
您可以使用 useActionState
钩子来处理服务端函数中的预期错误。
对于这些错误,应避免使用 try
/catch
代码块和抛出错误。相反,应将预期错误建模为返回值。
您可以将操作传递给 useActionState
钩子,并使用返回的 state
来显示错误消息。
服务端组件
在服务端组件中获取数据时,您可以使用响应来有条件地渲染错误消息或执行 redirect
。
未找到页面
您可以在路由段内调用 notFound
函数,并使用 not-found.js
文件来显示 404 UI。
处理未捕获异常
未捕获异常是指意外错误,表明在应用正常流程中不应出现的错误或问题。这些错误应通过抛出错误来处理,然后由错误边界捕获。
嵌套错误边界
Next.js 使用错误边界来处理未捕获异常。错误边界会捕获其子组件中的错误,并显示回退 UI 而不是崩溃的组件树。
通过在路由段内添加 error.js
文件并导出 React 组件来创建错误边界:
错误会冒泡到最近的父级错误边界。通过在路由层级结构的不同级别放置 error.tsx
文件,可以实现细粒度的错误处理。

全局错误
虽然不太常见,但您可以使用位于根应用目录中的 global-error.js
文件来处理根布局中的错误,即使在使用国际化时也是如此。全局错误 UI 必须定义自己的 <html>
和 <body>
标签,因为它在激活时会替换根布局或模板。