在使用node.js工作了几周之后,我发现node.js服务器错误和常规服务器端语言(如PHP)之间存在差异。
一个简单的例子:如果出于任何原因在我们的网站上发生错误。
PHP中的
如果用户向服务器和MySQL发送一些无效数据,MySQL将向该特定用户输出错误,整个应用程序不会发生故障。
如果用户向服务器和MySQL发送一些无效数据,则nodejs Server将关闭,因此所有用户都将断开连接,并且用户之间不再有任何连接。
这是一个非常大的问题。在大型Web应用程序中,不可能处理所有错误以避免Nodejs服务器停机,问题是, 有没有办法处理特定输出或类似输出的任何未知致命错误和异常。
答案 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')捕获验证错误并不是最符合您需求的,主要有两个原因:
You may read here about other error handling best practices并特别提到子弹4,6和10