是否有任何指南如何处理nodejs中未捕获的异常?

时间:2014-12-05 02:22:24

标签: javascript node.js exception-handling

最初,我的代码中使用uncaughtException来捕获所有未处理的异常。

process.on('uncaughtException', function (err) {
  if ('stack' in err) {
    console.log(err.stack);
  }
});

然而,这不是一个好方法,根据这个post,我们知道

`uncaughtException` is a very crude mechanism for exception handling and 
may be removed in the future.
And use `domains` instead. If you do use it, restart your application 
after every unhandled exception!
Do not use it as the node.js equivalent of On Error Resume Next. 

模块forever也是另一种好方法。

以下是我的问题:

  • On Error Resume Next是什么意思?
  • 是否有任何指导如何处理nodejs中未捕获的异常?

2 个答案:

答案 0 :(得分:1)

On Error Resume Next是一个Visual Basic(和VB.NET!)结构,它会导致任何到达其作用域的异常被忽略并继续执行。 (这是一个坏主意,要清楚。)看起来像这样:

Sub Example()
    On Error Resume Next

    Dim x As String = Nothing
    Dim y As String = x.Substring(0, 5) ' Fails! Ignored! y is Nothing, probably

    Console.WriteLine(y) ' Execution continues
End Sub

有点像在PHP中使用@启动每个语句,作为另一个例子。

forever是重启脚本的正确方法,该脚本在发生未处理的异常时不应终止。

答案 1 :(得分:1)

引自this

  • 您的应用程序不应该有未捕获的异常。这显然是疯了。
  • 您应该让您的应用程序崩溃,找到未捕获的异常并修复它们。这显然是疯了。
  • 你应该默默地吞下错误。这就是很多人所做的事,而且很糟糕。
  • 您应该让您的应用程序崩溃,记录错误并使用诸如暴发户,永久或监控之类的东西重新启动您的流程。这是务实的。
  • 您应该开始使用域来处理错误。显然是要走的路,尽管这是Node的一个实验性功能。