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

NextResponse返回错误状态码时try/catch未触发catch块

问题原因及解决方案

这是浏览器原生fetch API的特性决定的:只有当请求发生网络层面的失败(比如无法连接服务器、跨域被拦截、请求超时等)时,才会抛出错误进入catch块。而像500、404这类HTTP错误状态码,属于「请求已成功发送并收到服务器响应」的情况,fetch不会将其视为异常,自然不会触发catch。

验证与处理方式

你需要手动检查响应的状态码或response.ok属性来判断请求是否业务成功:

修改请求代码如下:

async function doRequest() {
  try {
    const response = await fetch("http://localhost:3000/api/users/signup", {
      method: "POST"
    })
    // 手动判断响应是否正常
    if (!response.ok) {
      // 解析错误信息并抛出,让catch捕获
      const errorData = await response.json();
      throw new Error(errorData.error || `HTTP错误: ${response.status}`);
    }
    console.log("response here: ", response)
  } catch (error: any) {
    console.log("error here: ", error)
  }
}

补充说明

  • response.ok是fetch提供的快捷属性,当状态码在200-299范围内时为true,其他情况为false
  • 如果需要更细粒度的状态码判断,可以直接使用response.status(比如单独处理401、403等)

内容的提问来源于stack exchange,提问作者Willian Almeida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:12:03