快速错误处理或域名?

时间:2014-06-23 20:06:18

标签: node.js express error-handling uncaught-exception

我正在nodejs和express中构建一个应用程序。任何人都可以帮助我理解以下代码之间的区别:

  var app = express();
  app.use(function(err, req, res, next){
  console.error(err);
  res.render('home.ejs', {message:'Something broke!'});
  });

 var domain = require('domain');
 var d = domain.create();
 d.on('error', function(err) {
 console.error(err);
 res.render('home.ejs', {message:'Something broke!'});
 });

这两段代码是替代的吗?如果是,哪一个更可靠,以避免应用程序崩溃生产?

2 个答案:

答案 0 :(得分:2)

Express将每个function (req, res, next) {}包装在try / catch中。它捕获了许多错误,但没有捕获异步错误。域捕获异步错误。然而,捕获错误并处理它是两回事。

如果你接下来的错误(又名d.on('error', next);),它最终会表达错误中间件,就像你的第一个例子一样。

因此,不要考虑表达vs域,而是考虑try / catch vs domains。在任何一种情况下都应使用Express来处理错误。

答案 1 :(得分:0)

我设法使用此中间件处理域的异步错误处理:

function(req,res,next){
    var d = domain.create();

    d.on('error',next)

    d.run(function(){
        next();
    })
}

我目前正在我的服务器上测试它,但看起来对我很好:)。我还创建了npm模块。你可以看看它:

npmjs.org - express-async-error

希望这会有所帮助。 :)