【问题标题】:Getting a stack backtrace from node.js on timout?在超时时从 node.js 获取堆栈回溯?
【发布时间】:2015-09-16 09:39:45
【问题描述】:
我正在使用带有域和cluster 的 node.js 来捕获意外异常(程序员错误),然后优雅地重新启动。但是,我们偶尔会遇到程序员未能添加最终的 .catch().finally() 以确保他们的代码实际返回。
我可以轻松添加一个超时,该超时将在预先指定的时间后引发异常,以确保这些错误请求不会永远存在。但我想做的是让超时信息从域中提取出来,以解释请求中发生了什么,这样我们就可以有一个日志/通知/任何以很好地指示程序员错误在哪里开头的东西.
有什么合理的方法吗?
如果重要的话,我们使用express 作为框架,express-domain-middleware 用于获取域/重启逻辑,并承诺用于异步逻辑。
【问题讨论】:
标签:
node.js
express
promise
【解决方案1】:
您实际上并不需要域。如果你使用 Promise 库(比如 bluebird,或者 when,甚至 Q)或最新版本的 Node(即 io.js),你不必记住在所有链上使用 .catch 并使用专用事件:
process.on("unhandledRejection", function(e, reason){
// promise was rejected, even if no `catch` or `finally` attached
// restart the process
});
请注意,域已被弃用,并且可能会在 NodeJS 的未来版本中被删除,如果您正在使用您已经拥有 catch 安全性的 Promise,那么就是这样。