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

测试Express应用默认错误处理程序出现超时是什么原因导致的?

超时问题诱因
  • 核心原因是 Express v4及更早版本原生不支持自动捕获异步路由处理函数抛出的Promise rejection异常

你写的/my-endpoint路由处理函数是async类型,当underlyingFunction抛出错误时,这个错误会转化为Promise rejected状态,但Express不会主动将这个异常传递给你注册的错误处理中间件errorHandler,请求会一直处于挂起状态,没有响应返回给测试用例里的request对象,最终触发jest的超时阈值报错。

修复方案

给异步路由加try catch捕获异常,主动调用next()将异常传递给错误处理中间件即可:

app.get('/my-endpoint', async (req, res, next) => {
  try {
    await underlyingFunction()
    res.send({ success: true })
  } catch (err) {
    // 手动传递错误给错误处理中间件
    next(err)
  }
})

如果不想每个异步路由都手动加try catch,也可以封装统一的异步错误捕获工具函数,批量处理异步路由的异常传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:36:01