在Node.js应用程序中处理未捕获异常的首选方式是什么?
顺便提一下,我正在使用基于Express的REST API Node.js服务器。
在Node.js应用程序中处理未捕获异常的首选方式是什么?
顺便提一下,我正在使用基于Express的REST API Node.js服务器。
很多人这样做
process.on('uncaughtException', function (err) {
console.log(err);
});
这很糟糕。当发生未捕获的异常时,你应该考虑你的应用程序处于不干净的状态。此时你不能可靠地继续运行程序。
让你的应用程序崩溃、记录错误并重新启动。
process.on('uncaughtException', function (err) {
console.error((new Date).toUTCString() + ' uncaughtException:', err.message);
console.error(err.stack);
// Send the error log to your email
sendMail(err);
process.exit(1);
})
让你的应用程序在未捕获异常的情况下崩溃,并使用类似forever或upstart的工具来立即重新启动它。您可以发送电子邮件以了解此类事件。
异常应该做两件事之一:
如果你的程序中有未捕获的异常,那么要么你有一个需要修复的错误,要么你需要捕获并正确处理该异常
复杂的异步代码,通常涉及一堆杂乱无章的未捕获的承诺,往往是许多未捕获异常问题的原因 - 你需要非常小心地观察如何返回你的承诺链
唯一的永久解决方案是采用现代的异步/等待代码实践来保持你的异步代码可维护性
process
事件来让进程继续运行。可以利用该事件的机会在停止进程之前检索和记录额外信息,但是进程仍然应该停止(或重新启动)。这些信息应该帮助您修改应用程序代码的其他部分,以便要么不引发异常,要么改进异常处理的源头。 - Jonathan Lonowski