【发布时间】:2015-03-30 23:24:03
【问题描述】:
通过the Node.js documentation,未处理的EventEmitter 将使正在运行的进程崩溃:
当 EventEmitter 实例遇到错误时,典型的操作是发出“错误”事件。错误事件在节点中被视为特殊情况。如果没有侦听器,则默认操作是打印堆栈跟踪并退出程序。
我非常希望进程在发生这种情况时不崩溃。[1]理想情况下,我可以像这样捕获 EventEmitter 错误的每个实例:
emitter.on('error', function(err) { console.log(err); })
虽然我们的应用程序很大,但简单搜索node_modules 文件夹会发现有很多 EventEmitter,跟踪它们会很麻烦。
是否有一个全局钩子可以用来捕获 EventEmitter 失败的所有实例?
我尝试了process.on('uncaughtException'),但这并没有捕获 EventEmitter 错误。我还尝试了process.on('error'),它会捕获进程发出的错误,但不会捕获其他EventEmitters 发出的错误。
其他地方说你应该使用域,但是,听起来你需要在其中包装特定的函数调用,此时你不妨找到并用.on('error') 包装每个 EventEmitter。我的同事还说,如果不弃用域,今后也不会使用域。
[1] 我理解“进程应该崩溃”参数背后的逻辑。部分原因是我想让进程保持活动状态,因为 a)我们的服务器需要很长时间才能重新启动,并且 b)进程不断崩溃,堆栈跟踪几乎为零;我认为保持进程有效将有助于记录和跟踪错误。
【问题讨论】:
标签: node.js