症状
异步路由处理器抛错或被拒绝,但 Express 的错误中间件从未运行:请求挂起,进程反而记录未处理的 rejection。Express 4 不会 await 处理器的 Promise,因此拒绝逃出了中间件链。错误处理器也可能顺序错误,或缺少标志其为错误处理器的四参数签名。
诊断
检查错误中间件注册位置是否在路由之后;查看异步处理器写法;确认是否显式 next(err)。
grep -n "app.use" server.js
根因
Express 4 不观察异步处理器的 Promise 拒绝,抛出的错误从未到达错误中间件,请求因此悬而未决。
修复
通过包装处理器或捕获后调用 next(error),把每个异步错误转发给 next;在路由之后注册四参数错误中间件;不要在既未重抛也未转发的 catch 中吞掉错误。
验证
触发失败路由确认错误中间件返回预期状态,并确认日志中不再出现未处理的 rejection。中间件响应即证明错误被正确路由。
常见陷阱
在 catch 中只记日志而不转发,会让请求一直挂起;应转发或重抛。