【问题标题】:Nodejs process crashed without an exceptionNodejs进程无异常崩溃
【发布时间】:2019-05-03 10:13:51
【问题描述】:

当我的 nodejs 应用程序中发生未捕获的异常时,我将日志条目写入日志。

process.on('uncaughtException', function (err) {
    log.warn('Caught exception. Exiting. error: ' + err + ", stack: " + err.stack);
    process.exit(1);
});

但是,今天有几次,应用程序在没有写入日志条目的情况下崩溃了。

应用程序在处理类似请求时两次都崩溃了,所以这主要应该是由于应用程序的一些问题,而不是因为有人杀死了它或其他一些外部因素。

那么,有什么方法可以让应用程序崩溃而不给出未捕获的异常?

【问题讨论】:

  • 这取决于 server.js 文件中其他事件的处理方式 - 'error'、'clientError' 等事件。你能分享包含上述代码位的文件吗?

标签: javascript node.js promise es6-promise


【解决方案1】:

我建议你也添加unhandledRejection。正如Node.js 文档所提到的,

unhandledRejection 事件会在 Promise 被拒绝并且在事件循环的一回合内没有附加到该 Promise 的错误处理程序时发出。使用 Promises 进行编程时,异常被封装为“被拒绝的 Promise”。可以使用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()`

【讨论】:

    猜你喜欢
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多