使用domain模塊處理錯(cuò)誤
domain模塊概述
從Node.js v0.8版開始哥放,提供domain模塊。該模塊中提供一個(gè)Domain對(duì)象爹土,當(dāng)應(yīng)用程序在任何時(shí)刻拋出錯(cuò)誤時(shí)可以通知該對(duì)象甥雕,然后由該對(duì)象來統(tǒng)一處理這些錯(cuò)誤。
使用domain模塊處理錯(cuò)誤實(shí)例
var http = require('http');
var domain = require('domain');
http.createServer(function (req, res) {
var d = domain.create();
d.once('error', function(err) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<head><meta charset="utf-8"/></head>');
res.write('服務(wù)器端接收客戶端請(qǐng)求時(shí)發(fā)生以下錯(cuò)誤:');
res.end(err.message);
});
d.run(function() {
if(req.url!=="/favicon.ico"){
noneexist();
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<head><meta charset="utf-8"/></head>');
res.end('你好\n');
}
});
}).listen(1337, "127.0.0.1");
創(chuàng)建并使用Domain對(duì)象
在實(shí)現(xiàn)這一處理之前胀茵,首先需要使用domain模塊中的create方法創(chuàng)建一個(gè)Domain對(duì)象
var domain = domain.create();
create方法沒有任何參數(shù)社露,該方法返回被創(chuàng)建的Domain對(duì)象。該對(duì)象是一個(gè)繼承了EventEmitter類的實(shí)例對(duì)象琼娘,當(dāng)該對(duì)象捕獲到任何錯(cuò)誤時(shí)峭弟,觸發(fā)該對(duì)象的error事件⊥哑矗可以通過監(jiān)聽該對(duì)象的error事件并指定事件回調(diào)函數(shù)的方法來實(shí)現(xiàn)當(dāng)捕捉到錯(cuò)誤時(shí)的處理瞒瘸。
監(jiān)聽錯(cuò)誤信息
domain.on('error', function(err) {
//事件回調(diào)函數(shù)代碼略
});
捕獲指定方法的錯(cuò)誤信息
在Domain對(duì)象被創(chuàng)建后,需要指定該對(duì)象所監(jiān)聽的代碼熄浓,我們需要將這些代碼書寫在一個(gè)函數(shù)中挨务,并且使用Domain對(duì)象的run方法指定Domain對(duì)象監(jiān)聽該函數(shù)中的代碼。當(dāng)這些代碼觸發(fā)任何錯(cuò)誤時(shí),將被Domain對(duì)象捕獲谎柄。Domain對(duì)象的run方法的指定方法如下所示(代碼中的domain代表一個(gè)Domain對(duì)象)丁侄。
domain.run(fn)
在Domain對(duì)象的run方法中,使用一個(gè)參數(shù)朝巫,參數(shù)值為一個(gè)函數(shù)鸿摇。當(dāng)該函數(shù)中觸發(fā)任何錯(cuò)誤時(shí),將被Domain對(duì)象捕獲劈猿。
顯性綁定
domain.add(emitter)
取消意綁定對(duì)象對(duì)象的綁定
domain.remove(emitter)
綁定回調(diào)函數(shù)
domain.bind(callback
攔截回調(diào)函數(shù)
domain.intercept(callback)
彈出domain堆棧
domain.exit()
在使用了Domain對(duì)象的exit方法后拙吉,該對(duì)象將不能再捕獲任何錯(cuò)誤。
推入domain堆棧
domain.enter();
銷毀domain對(duì)象
d.dispose();