Node.js在回调中表达错误处理

我是node.js和express的新手.我在我的app.js文件中有以下内容作为最后的错误处理程序:

app.use(function(err, req, res, next){
  // we may use properties of the error object
  // here and next(err) appropriately, or if
  // we possibly recovered from the error, simply next().
  res.status(err.status || 500);

  console.log(err);

  var errMsg = "An internal error occurred. Please notify your system administrator.";

  // respond with json
  if (req.accepts('json')) {
    res.send({error: errMsg});
    return;
  }

  // respond with html page
  if (req.accepts('html')) {
    res.render('500', errMsg);
    return;
  }

  res.type('txt').send(errMsg);
});

当我杀死数据库服务器或导致“中间件”级别错误时,它在测试期间适用于我,但我不确定它是否也会在回调收到错误时启动?我一直在回调中使用这样的东西:

if(err) {
    console.log(err);
    res.send(500, {error: err});
}

但是我想更好地遵循DRY原则并想出一种方法来处理全局(跨模块)回调内部的错误,而不是编写一堆相同的代码.如果中间件’catchall’不起作用,我是否坚持每个模块的全局功能?希望这是有道理的.

最佳答案 看看
connect-domain中间件.它可以帮助您捕获异步回调,超时等内部的所有错误.仅适用于节点> 0.8.0.

点赞