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
相关产品推荐
相关产品推荐

