如何在API请求后捕获错误消息?非200状态码处理疑问
解决方案:解析错误响应体后抛出自定义错误
嘿,这个场景我太熟悉了!你说得没错,确实需要先解析错误响应的内容,才能把后端返回的具体错误消息传递到catch块里。直接throw new Error()的话,只能拿到默认的状态文本(比如"Bad Request"),没法获取响应体里的自定义错误信息。
修改后的代码示例
apiService.createNewUser(data) .then((response) => { if (response.ok) { return response.json(); } else { // 先解析错误响应的JSON内容,再抛出带具体消息的错误 return response.json().then(errorBody => { // 这里根据后端实际返回的错误字段调整,比如errorBody.msg / errorBody.error等 const errorMessage = errorBody.message || response.statusText; throw new Error(errorMessage); }); } }) .then((newUserData) => { // 成功逻辑 console.log('用户创建完成:', newUserData); }) .catch((err) => { console.log('错误详情:', err.message); });
关键说明
- 解析错误响应:当
response.ok为false时,不能直接抛出错误,得先调用response.json()(如果后端返回纯文本就用response.text())来读取响应体内容。 - 自定义错误消息:解析后拿到后端返回的错误数据(比如
errorBody.message),用它来构造Error对象;如果后端没返回具体消息,就用response.statusText作为兜底(比如"Bad Request"、"Not Found"等)。 - 链式处理:因为
response.json()返回的是Promise,所以需要在它的then回调里抛出错误,这样上层的catch才能捕获到这个带自定义消息的错误。
如果你的后端返回的错误结构不是message字段,比如errorBody.error或者errorBody.msg,记得对应调整代码里的字段名哦~
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

