【发布时间】:2014-06-08 16:32:09
【问题描述】:
我的 express 应用使用默认的 JSON 正文解析器:
app.use(bodyParser.json());
在app.js 文件的下方,我有自己的路由器来构建 REST API 路由:
var api = require('./routes/api/index');
...
app.use('/api', api);
这个路由器有一个错误处理程序,除其他外:
router.use(function (err, req, res, next) {
debugger;
res.status(err.code ? getParseErrorStatus(err.code) : res.status || 500).send({
error: err.message
});
});
每当 bodyParser 在解析请求正文时抛出错误时,我都会调用我的通用快速错误处理程序:
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
debugger;
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
即使对 API 路由器捕获的对 /api/* URL 的调用也是如此。
如果 URL 是 API URL,我如何使 JSON 解析错误(由链中的中间件捕获)调用我在 API 路由器中定义的错误处理程序,而不是总是调用通用错误处理程序?
【问题讨论】: