Next.js 13 App目录API路由抛错时出现headers未定义报错
问题排查:Next.js 13 App路由API抛错时出现"Cannot read properties of undefined (reading 'headers')"
当在Next.js 13的App目录API路由中执行以下代码时:
throw createHttpError(FORBIDDEN, "You are already registered")
触发了如下错误:
error TypeError: Cannot read properties of undefined (reading 'headers')
问题原因
核心问题出在错误处理的返回逻辑:
- 在
POST函数的catch块中,你调用了handleErrors(error),但没有将该函数的返回值作为API响应返回。 - Next.js的App路由API要求必须返回一个
NextResponse对象,当前代码执行handleErrors后无返回,导致函数最终没有输出任何响应,框架内部处理undefined时就会抛出"headers"未定义的错误。
解决方案
1. 修正catch块的返回逻辑
修改POST函数的catch块,将handleErrors的返回值return出去:
catch (error) { if (workProgress >= 2 && result) { await deleteUser({ _id: result._id }); } // 关键:返回错误处理后的响应 return handleErrors(error); }
2. 补充边界分支的响应逻辑
当前代码中,当foundUser存在但未验证且没有找到token时,没有任何返回或抛错逻辑,会导致API无响应,需要补充处理:
else { const foundToken = await findToken({ userId: foundUser._id, purpose: "verify_email", }); if (foundUser && foundUser?.verified) { throw createHttpError(FORBIDDEN, "You are already registered"); } else if (foundUser && !foundUser?.verified && foundToken) { throw createHttpError(FORBIDDEN, "Registration process pending, please verify your email"); } else { // 示例:抛出错误或执行重新发送验证邮件逻辑 throw createHttpError(BAD_REQUEST, "Please complete registration by verifying your email"); } }
内容的提问来源于stack exchange,提问作者shiblee saidul
相关产品推荐
相关产品推荐

