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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:24:55