Next.js错误边界未捕获异常求助:RedirectErrorBoundary报错
Next.js 错误边界控制台未捕获异常问题
问题现象
自定义error.tsx错误边界可正常渲染错误页面,reset功能也能正常触发,但浏览器控制台始终提示异常未被捕获,报错信息显示错误发生在<RedirectErrorBoundary>组件中。
问题原因
Server Action中直接reject字符串而非Error实例,Next.js处理Server Action错误时,无法将字符串错误正确包装为可被错误边界捕获的标准化错误对象,导致错误渗透到框架内部的RedirectErrorBoundary,最终在控制台抛出未捕获异常。
解决方案
在Server Action中确保抛出的是Error实例而非字符串,直接使用throw new Error()替代Promise的reject即可,Server Action本身支持异步抛出错误。
修改后的auth.ts代码
import 'server-only' export async function tryLogin(username: string, password: string) { "use server" // 直接抛出Error实例,替代Promise reject字符串 throw new Error("Login failed") // 带逻辑判断的示例写法: // if (new Date().getTime() % 2 === 0) { // redirect("/") // } else { // throw new Error('Login failed') // } }
补充说明
- Server Action本身是异步函数,无需手动返回Promise,直接
throw错误即可被Next.js错误边界正确捕获 - 自定义
error.tsx会正常接收Error类型的错误对象,reset功能不受影响 - 修改后控制台将不再出现未捕获异常提示,错误会被正确限制在自定义错误边界内
内容的提问来源于stack exchange,提问作者mikeb
相关产品推荐
相关产品推荐

