Exception 处理node.js异常

Exception 处理node.js异常,exception,node.js,Exception,Node.js,我们希望将node.js用于一个高度动态的项目。传统上,我们使用Java,当遇到未经处理的异常时,会抛出错误,但web应用程序(通常)会继续服务于其他请求 但是,对于node,相同的场景会导致进程终止。如果我们将这个系统部署到生产环境中,而整个服务器由于一个未处理的异常而崩溃,我不愿意去想会发生什么 我想知道是否有教程/工具/等帮助处理异常问题。例如,有没有一种方法可以添加一个全局的最后手段类型异常?如前所述,您会发现错误。堆栈提供了一个更完整的错误消息,例如导致错误的行号: process.o

我们希望将node.js用于一个高度动态的项目。传统上,我们使用Java,当遇到未经处理的异常时,会抛出错误,但web应用程序(通常)会继续服务于其他请求

但是,对于node,相同的场景会导致进程终止。如果我们将这个系统部署到生产环境中,而整个服务器由于一个未处理的异常而崩溃,我不愿意去想会发生什么

我想知道是否有教程/工具/等帮助处理异常问题。例如,有没有一种方法可以添加一个全局的最后手段类型异常?

如前所述,您会发现
错误。堆栈提供了一个更完整的错误消息,例如导致错误的行号:

process.on('uncaughtException', function (err){
  console.error(err)
})
process.on('uncaughtException', function (error) {
   console.log(error.stack);
});
你应使用:

响应抛出的错误最安全的方法是关闭进程。当然,在一个普通的web服务器中,可能有许多连接处于打开状态,而突然关闭这些连接是不合理的,因为错误是由其他人触发的

更好的方法是向触发错误的请求发送错误响应,同时让其他请求在正常时间内完成,并停止侦听该工作进程中的新请求

链接页面有示例代码,我在下面稍微简化了一下。它的工作原理如上所述。您可以调用服务器,使其在退出时自动重新启动,或者

var server = require('http').createServer(function(req, res) {
  var d = domain.create();
  d.on('error', function(er) {
    console.error('error', er.stack);

    try {
      // make sure we close down within 30 seconds
      var killtimer = setTimeout(function() {
        process.exit(1);
      }, 30000);
      // But don't keep the process open just for that!
      killtimer.unref();

      // stop taking new requests.
      server.close();

      // try to send an error to the request that triggered the problem
      res.statusCode = 500;
      res.setHeader('content-type', 'text/plain');
      res.end('Oops, there was a problem!\n');
    } catch (er2) {
      // oh well, not much we can do at this point.
      console.error('Error sending 500!', er2.stack);
    }
  });

  // Because req and res were created before this domain existed,
  // we need to explicitly add them.
  d.add(req);
  d.add(res);

  // Now run the handler function in the domain.
  d.run(function() {
    // your application logic goes here
    handleRequest(req, res);
  });
});