
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.