【问题标题】:Is there any guide how to handle the uncaught exception in nodejs?是否有任何指南如何处理nodejs中未捕获的异常?
【发布时间】:2014-12-05 02:22:24
【问题描述】:

最初,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 中未捕获的异常的指南?

【问题讨论】:

  • on error resume next 是 Visual Basic 6 中的一个选项(可能还有其他选项,但我从那里知道),它将忽略一段代码中的所有错误,并继续不间断地执行。这使得调试变得困难,因为您不会收到发生错误的特定消息,您只会得到一个无意义的结果。
  • 那么,你为什么不使用“域”?
  • 域名很可能很快就会被弃用。
  • @minitech 那么我们应该使用哪一个来处理错误?
  • @pmverma:我喜欢promises,我自己。 zangw:groups.google.com/forum/#!topic/nodejs/reTInaFyC2s

标签: javascript node.js exception-handling


【解决方案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 是重新启动脚本的正确方法,该脚本在发生未处理的异常时不应终止。

【讨论】:

  • 还在 VB.NET 中?哇。我原以为这是他们有机会时会杀的那种东西。
  • @JeremyBanks:不仅Resume Next,还有GoTo label|0|-1!实际上,我以前使用过其中一个,这是有充分理由的。但只有一次。 =)
【解决方案2】:

引用this

  • 您的应用程序不应有未捕获的异常。这显然是疯了。
  • 您应该让您的应用程序崩溃,找到未捕获的异常并修复它们。这显然是疯了。
  • 您应该默默地接受错误。很多人都这样做,而且很糟糕。
  • 您应该让您的应用程序崩溃、记录错误并使用 upstart、forever 或 monit 等方法重新启动您的进程。这是务实的。
  • 您应该开始使用域来处理错误。显然是要走的路,尽管这是 Node 的一个实验性功能。

【讨论】:

  • 我使用的同一个链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2013-03-09
  • 2015-09-10
  • 2011-10-27
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
相关资源
最近更新 更多