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

Node.js中catch代码块未执行问题求助(含Express示例)

问题排查:Express中try/catch块不生效的原因及解决方法

一、测试代码中catch不触发的原因

MongoDB的findOne方法在未匹配到文档时,不会抛出异常,只会返回null。所以你的try块代码不会触发错误,自然不会进入catch逻辑。

如果要在未找到数据时执行catch里的操作,需要手动判断返回值并抛出错误:

const test = async()=>{
  try{
      const data = await User.findOne({_id: "1234"})
      // 手动判断,无数据则抛出错误
      if (!data) throw new Error("未找到目标用户");
  }catch(err){
      const data = await User.findOne({_id: "4567"})
  }
}

二、实际路由中catch不生效的原因

假设algoTrade是包含axios请求的异步函数,你调用它时没有加await,导致它返回的Promise错误无法被当前的try/catch捕获。异步函数的错误必须通过await或者.catch()绑定捕获逻辑,否则会变成未处理的Promise拒绝。

修改后的路由代码:

router.post("/", async (req, res) => {
  const data = req.body;
  data.time = new Date();
  data._id = uniqid();
  data.orderStatus = "Pending";
  const tradeData = await TradePara.create(data);
  try {
     // 加上await,让try/catch能捕获异步函数的错误
     await algoTrade(data);
  } catch (err) {
    console.log(err);
    // 记得给客户端返回错误响应,避免请求挂起
    res.status(500).json({ error: err.message });
  }
});

额外提醒:如果algoTrade不是async函数,但内部使用axios的回调写法,那需要在axios的请求链中添加.catch()处理错误,不过更推荐统一用async/await的写法来简化错误捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:05:20