在我的NodeJS应用中,每当遇到未处理的异常时,我都希望进程退出。
但是,根据NodeJS的文档,它似乎默认情况下会退出。 所以我的问题是-我的代码中应该有这样的东西吗?
process
.on('uncaughtException', (err) => {
log.error('uncaughtException:', err.message);
log.error(err.stack);
process.exit(1);
});
还是我应该将process.exit(1)
部分排除在外,因为不需要它了?
答案 0 :(得分:2)
部分process.exit(1)
是必需的,默认情况下不会退出,您的应用程序可能会终止于意外状态,因此您应将process.exit(1)
置于uncaughtException
但是,将事件unhandledRejection
(如果您在应用中使用Promise
)放置也是一个好习惯,这样您就可以更好地了解发生了什么。
process
.on('unhandledRejection', (reason, p) => {
console.error(reason, 'Unhandled Rejection at Promise', p);
})
.on('uncaughtException', err => {
console.error(err, 'Uncaught Exception thrown');
process.exit(1);
});
此外,它是一个补充说明(Dario提及并引用了官方文档here,请参见documentation)
'uncaughtException'的正确用法是执行同步 清理分配的资源(例如文件描述符,句柄等) 在关闭该过程之前。