如何处理node.js中的所有异常

时间:2013-11-11 15:26:21

标签: node.js error-handling

在使用node.js工作了几周之后,我发现node.js服务器错误和常规服务器端语言(如PHP)之间存在差异。

一个简单的例子:如果出于任何原因在我们的网站上发生错误。

PHP中的


如果用户向服务器和MySQL发送一些无效数据,MySQL将向该特定用户输出错误,整个应用程序不会发生故障。

Nodejs中的


如果用户向服务器和MySQL发送一些无效数据,则nodejs Server将关闭,因此所有用户都将断开连接,并且用户之间不再有任何连接。

这是一个非常大的问题。在大型Web应用程序中,不可能处理所有错误以避免Nodejs服务器停机,问题是,  有没有办法处理特定输出或类似输出的任何未知致命错误和异常。

2 个答案:

答案 0 :(得分:31)

您可以在流程对象上使用uncaughtException事件来执行您想要的操作,但正如其他人所说的那样,建议使用域和捕获/处理错误。

process.on('uncaughtException', function(err) {
  console.log('Caught exception: ' + err);
});

答案 1 :(得分:4)

您应该简单地验证路由中的请求数据,捕获任何错误(try-catch将在此处工作,因为它是同步操作)并通过将适当的HTTP状态(例如400)返回给调用者并记录错误来处理它。如果您正在使用Express,则甚至不必使用try-catch,因为Express将捕获所有同步异常并允许您集中处理它。

我个人认为使用process.on('uncaughtException')捕获验证错误并不是最符合您需求的,主要有两个原因:

  • 在此位置,您没有错误发生位置的上下文,也无法向调用方发送回复
  • 任何类型的未处理错误都将在此处到达,如果您不知道发生了什么类型的错误,建议您重新启动该过程。由于输入无效而重新启动流程没有意义,例如,通过这种方式为任何外部调用者(DDOS)关闭应用程序太简单了

You may read here about other error handling best practices并特别提到子弹4,6和10