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

Node/Express自定义错误处理器未触发,求解决方案

问题原因及解决方案

核心问题是错误处理中间件的位置错误:Express的错误处理中间件必须注册在所有其他中间件、路由定义的最后,否则无法捕获后续路由抛出的错误。

你的代码里把错误处理中间件放在了路由(....部分)之前,当调用next(error)时,该中间件还没进入请求处理链,自然不会被触发。

修改步骤

  1. 将错误处理中间件移动到所有路由、其他中间件之后,app.listen()之前:
const express = require('express')
const bodyParser = require('body-parser');
const methodOverride = require('method-override')
const app = express ();
const port = process.env.PORT || 3000;
app.use(express.json());
app.use(cors());
// Configuring body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());

// 所有路由定义放在这里
// ....
// ....

// 错误处理中间件移到最后
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('my handler')
})

app.listen(port, () => {
  console.log(`Server running on port ${port}`)
})
  1. 确认路由中调用next(error)后,没有再发送响应(你的getRidesForDate函数这点是正确的,错误分支只调用next(error),不会执行response.json)。

这样修改后,当数据库查询出错调用next(error)时,错误就会被你的自定义处理器捕获,返回你设置的响应内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:45:59