【问题标题】:Express error handling or domain?快速错误处理或域?
【发布时间】:2014-06-23 20:06:17
【问题描述】:

我正在用 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!'});
 });

这两段代码可以替代吗?如果是,为了避免应用在生产中崩溃,哪一个更可靠?

【问题讨论】:

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


    【解决方案1】:

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

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

    因此,与其考虑 express 与域,不如考虑 try/catch 与域。无论哪种情况,都应该使用 Express 来处理错误。

    【讨论】:

      【解决方案2】:

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

      function(req,res,next){
          var d = domain.create();
      
          d.on('error',next)
      
          d.run(function(){
              next();
          })
      }
      

      我目前正在我的服务器上对其进行测试,但对我来说看起来不错:)。我还创建了 npm 模块。你可以看看:

      npmjs.org - express-async-error

      希望这会有所帮助。 :)

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 2017-05-25
        • 1970-01-01
        • 2021-08-29
        相关资源
        最近更新 更多