如何在expressjs中触发路由器错误处理程序而不是默认错误处理程序

时间:2014-06-08 16:32:10

标签: node.js 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,那么如何调用我在API路由器中定义的错误处理程序,而不是总是调用泛型错误处理程序,如何使JSON解析错误(被链中的中间件捕获)调用? / p>

1 个答案:

答案 0 :(得分:4)

在相同的路由器堆栈级别调用错误处理程序。由于bodyParser.json()在main / root / app层执行,它将在main / root / app层查找第一个错误处理程序。

因此,如果您想处理API正文解析错误,则必须将bodyParser.json()中间件移动到需要正文解析的每个路由/路由器。

相关问题