当我的nodejs应用程序中发生未捕获的异常时,我将日志条目写入日志。
process.on('uncaughtException', function (err) {
log.warn('Caught exception. Exiting. error: ' + err + ", stack: " + err.stack);
process.exit(1);
});
但是,今天有几次,该应用程序崩溃了,没有写入日志条目。
两次处理类似请求时,应用程序都崩溃了,因此这主要应该是由于应用程序出现问题,而不是因为有人杀死了它或其他外部因素。
那么,在没有给出未捕获异常的情况下,应用程序是否有可能崩溃?
答案 0 :(得分:1)
我建议您也添加unhandledRejection
。正如Node.js文档中提到的
只要Promise被拒绝并且在事件循环之内没有错误处理程序附加到Promise,就会发出
unhandledRejection
事件。使用Promises进行编程时,异常被封装为“拒绝的承诺”。可以使用promise.catch()
来捕获和处理拒绝,并通过Promise链进行传播。unhandledRejection
事件对于检测并跟踪已被拒绝但尚未处理的拒绝的承诺很有用。
这里是一个如何再次使用Node.js提供的示例:
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at:', p, 'reason:', reason);
// application specific logging, throwing an error, or other logic here
});
somePromise.then((res) => {
return reportToUser(JSON.pasre(res)); // note the typo (`pasre`)
}); // no `.catch()` or `.then()`