我正在使用node.js和域cluster
来捕获意外异常(程序员错误)然后正常重启。但是,我们偶尔会让程序员无法添加最终.catch().finally()
以确保其代码实际返回。
我可以轻松添加一个超时,该超时会在预先指定的时间后抛出异常,以确保这些错误请求不会永远存在。但我想要做的是将超时拉出信息从域中解释出来,以解释请求中发生了什么,这样我们就可以得到一个日志/通知/任何开头都能很好地指示程序员错误的位置
有没有合理的方法呢?
如果重要,我们使用express
作为框架,express-domain-middleware
来获取域/重启逻辑,并承诺使用异步逻辑。
答案 0 :(得分:1)
您实际上并不需要域名。如果您使用promise库(如bluebird,或者甚至是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中删除这些域名,如果您使用已经保证安全的承诺,那么就可以了。