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

在Next.js中使用axios调用Express接口时错误无法被catch捕获如何解决

问题根因

axios 默认的响应校验规则为:仅当接口返回200~299区间的HTTP状态码时,才判定请求成功,执行.then()回调;其余状态码会触发.catch()回调。
你当前的Express代码在登录出错时,仍然使用默认的200状态码返回错误信息,所以axios会判定请求成功,进入.then()逻辑而非.catch()。

解决方案

方案1:修改后端返回逻辑(推荐,符合HTTP协议规范)

登录失败属于未授权场景,应该返回401状态码,修改Express接口的错误处理分支:

// Express用户登录接口错误分支修改
if (error) {
  // 先设置401状态码,再返回错误信息
  res.status(401).send({ error })
  return
}

修改后登录失败时接口返回401状态码,会自动触发axios的.catch()回调。

方案2:前端兼容处理(无需修改后端)

如果暂时无法调整后端代码,可以在前端.then()逻辑开头主动判断错误,抛出异常触发.catch():

.then((result) => {
  // 新增错误判断
  if (result.data.error) {
    throw new Error(result.data.error)
  }
  sessionStorage.setItem('token', result.data.token);
  axios.defaults.headers.common['Authorization'] = "Bearer " + result.data.token;
  console.log('user signed in');
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:36:00