100
9
Web
应用应该使用 window.onerror 事件处理函数,发生任意
JavaScript
错误时,你
好知晓。你不可能清楚
Web
应用中所有可能引发
JavaScript
错误的代码组合,而使
用事件处理函数可在不过于干扰开发者的情况下,安全地监控错误的发生情况。
Node.js
的全局错误处理
Node.js
捕获全局错误的机制与上面所讲的类似。只要是出现的
JavaScript
错误没有
用其他方式处理process 对象就会触发 unCaughtException 事件。可用以下代码监
听该事件,接收
JavaScript
错误对象:
process.on("uncaughtException", function(err) {
log(err);
});
如果错误由该事件处理函数处理,那么
Node.js process
不会自动退出(任何未捕获
的异常将导致其退出)。有些人建议,你应该总是在事件处理器中调用 process.
exit;然而,是否选择这样做,很大程度上取决于你的应用以及在不影响应用的总
体状态下从错误恢复正常运行的难易程度。出现未捕获的错误时,你应发挥出最佳
的判断能力,采取正确的做法:记录错误、退出 process、重启 process 其他完
全不同的做法。
Node.js
还有
domain
功能,支持设置错误处理函数。运行特定代码出现未捕获的异常,
可用该功能。使用方法如下:
var d = require("domain").create();
d.on("error", function(err){
log(err);
});
d.run(function(){
/* some code that might throw an error */
});
该示例的基本思想是,也许会引发错误的代码可以放到在
domain
上运行的函数调用
之中。那么,函数调用之中的代码若引发错误,将触发该
domain
的错误事件。你可
以监听 error 事件并做出恰当处理。
domain
Node.js
一个相当新的概念,日后也许会有较大变动。
domain
的最佳使用
方法仍在发展和讨论之中,因此决定采用它之前,请一定花点时间探究
domain
是否
适合你的错误处理策略。

Get JavaScript 之美 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.