当我的nodejs应用程序中发生未捕获的异常时,我会在日志中写入日志条目。
process.on('uncaughtException', function (err) {
log.warn('Caught exception. Exiting. error: ' + err + ", stack: " + err.stack);
process.exit(1);
});
但是,今天几次,应用程序崩溃而没有写日志条目。
在处理类似请求时,应用程序都崩溃了两次,所以它主要应该归因于应用程序的某些问题,而不是因为有人杀了它或其他一些外部因素。
那么,有没有任何方式应用程序崩溃而不给出未捕获的异常?
我建议你添加unhandledRejection
。正如提到的Node.js文档,
每当Promise被拒绝时都会发出
unhandledRejection
事件,并且在事件循环的转弯中没有错误处理程序附加到promise。使用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()`