《Node.js》之事件處理機制以及事件環機制(一)

一、Node.js中的事件javascript

Node.js中的JavaScript與運行在瀏覽器中的JavaScript相似,在程序執行的時候也會觸發一些事件,例如:「服務器接收到客戶端的請求」,「運行產生錯誤」,「斷開鏈接」等事件。在Node.js中會根據不一樣的事件,進行相應的處理。java

二、EventEmitter類瀏覽器

Node.js中的event模塊是用於處理各類事件的模塊。在event模塊中定義了EventEmitter類,全部能夠觸發事件的對象,都是繼承了EventEmitter類的子類的實例對象。在EventEmitter類中定義了不少與對象的事件處理函數綁定和解除相關處理須要用到的方法。服務器

三、EventEmitter類中的方法函數

on()方法和addListener()方法ui

on()方法和addListener()方法的功能和內部實現過程是相同的,只是方法名稱不一樣。這兩個方法均可以用來爲指定的事件名稱綁定事件處理函數。使用on()方法綁定事件,程序示例:url

var http = require('http');	//引入http模塊
var server = http.createServer();	//經過createServer()方法建立http服務器

/*
*爲server服務器在接收到來自客戶端請求時觸發的request事件綁定事件處理函數	
*/
server.on('request', function(request, response){
	console.log('使用on()方法綁定事件:');
	console.log(request.url);
	response.end();
});

server.listen(8000, '127.0.0.1');

使用addListener()方法綁定事件,程序示例:code

var http = require('http');	//引入http模塊
var server = http.createServer();	//經過createServer()方法建立http服務器

/*
*爲server服務器在接收到來自客戶端請求時觸發的request事件綁定事件處理函數	
*/
server.on('request', function(request, response){
	/*
	*使用addListener()方法綁定事件
	*/
	server.addListener('request', function(request, response){
		console.log('使用addListener()方法綁定事件:');
		console.log(request.url);
		response.end();
	});
});

server.listen(8000, '127.0.0.1');

在實際開發過程當中可使用on()方法給一個事件綁定多個不一樣的事件處理函數,程序示例:server

var http = require('http');
var server = http.createServer();

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('服務器端接收到客戶端的請求。');
	}
});

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log(request.url);
	}
	response.end();
});

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('發送響應完畢。');
	}
	response.end();
});

server.listen(8000, '127.0.0.1');

程序運行截圖: 圖片1.png對象

once()方法

once()與on()方法相似,也能夠爲指定的事件名稱綁定事件處理函數,可是使用once()方法爲指定的事件名稱綁定事件處理函數只綁定一次。程序示例:

var http = require('http');
var server = http.createServer();

//使用once()方法讓綁定的事件函數只執行一次
server.once('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('服務器端已經接收到客戶端請求。');
	}
});

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log(request.url);
	}
	response.end();
});

//使用once()方法讓事件處理函數只執行一次
server.once('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('發送響應完畢。');
	}
});

server.listen(8000, '127.0.0.1');

程序運行截圖: 圖片2.png

removeListener()方法

使用removeListener()方法能夠移除指定事件名稱的事件處理函數。使用removeListener()方法移除指定事件的事件處理函數,程序示例:

var http = require('http');
var server = http.createServer();

var testFunction = function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('發送響應完畢。');
	}
}

//爲request事件綁定多個事件處理函數
server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('接收到客戶端的請求。');
	}
});

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log(request.url);
	}
	response.end();
});

server.on('request', testFunction);
server.removeListener('request', testFunction);
server.listen(8000, '127.0.0.1');

removeAllListeners()方法

removeAllListeners()方法能夠移除指定事件名稱的全部已經綁定事件。程序示例:

var http = require('http');
var server = http.createServer();

var testFunction = function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('發送響應完畢。');
	}
}

//爲request事件綁定多個事件處理函數
server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('接收到客戶端的請求。');
	}
});

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log(request.url);
	}
	response.end();
});

server.on('request', testFunction);
server.removeAllListener('request');
server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log('Hello.');
	}
	response.end();
});
server.listen(8000, '127.0.0.1');

emit()方法

emit()方法能夠用於手動觸發一個事件,emit()方法中能夠有一個或者多個參數,第一個參數表示被手動觸發的事件名稱,從第二個參數開始表示傳遞給事件處理函數的參數。程序示例:

var http = require('http');
var server = http.createServer();

server.on('request', function(request, response){
	if(request.url !== '/favicon.ico'){
		console.log(request.url);
	}
	response.end();
});

server.on('myEvent', function(arg1, arg2, arg3){
	console.log('自定義事件被觸發。');
	console.log(arg1);
	console.log(arg2);
	console.log(arg3);
});

server.emit('myEvent', 'Hello', 'World', '.');
server.listen(8000, '127.0.0.1');
相關文章
相關標籤/搜索