如何处理node.js中的所有exception

在使用node.js工作了几个星期之后,我发现node.js服务器错误和像PHP这样的常规服务器端语言是有区别的。

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

在PHP中
如果用户向服务器和MySQL发送一些无效的数据,MySQL会向特定的用户输出错误,整个应用程序不会closures。

在Nodejs中
如果用户向服务器和MySQL发送了一些无效的数据,nodejs Server将会closures,所有的用户都将断开连接,并且用户之间再也没有连接。

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

你可以在进程对象上使用uncaughtException事件来做你想做的事情,但正如其他人所说的那样,build议在正确的级别上使用域和捕获/处理错误。

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

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

我个人不认为使用process.on('uncaughtException')捕获validation错误是您需要的最好的匹配,主要有两个原因:

  • 在这个位置,你没有错误发生的地方的上下文,并且不能发回响应给调用者
  • 任何types的未处理的错误将在这里到达,如果您不知道发生了什么types的错误,build议重新启动该过程。 由于input无效,重启进程没有任何意义,例如,这样可以轻松地将应用程序closures以用于任何外部调用者(DDOS)

您可以在这里阅读其他error handling最佳实践 ,具体参考第4,6和第10项