EventEmitter類別
在Node.js的用於實作各種事件處理的event模組中,定義了一個EventEmitter類別。所有可能觸發事件的對像都是一個整合了EventEmitter類別的子類別的實例對象,在Node.js中,為EventEmitter類別定義了許多方法,所有與對象的事件處理函數的綁定及解除相關的處理均依靠這些方法的呼叫來執行。
event:代表事件名稱
listener:代表事件處理函數
中括號內的參數代表該參數為可選參數
EventEmitter類別的on方法
var http = require("http"); var server = http.createServer(); server.on("request", function(req, res){ console.log(req.url); res.end(); }); server.listen(1337, "127.0.0.1");
在這段程式碼中,我們指定當伺服器接收到客戶端請求時,在你控制台視窗中輸出客戶端請求的目標的URL位址,並使用回應物件的end方法立即結束回應。
執行程式碼,然後在瀏覽器視窗中輸入:http://localhost:1337://,控制台輸出如下:
控制台輸出
當然,也可以透過多個on方法的執行來對同一個事件綁定多個事件處理函數。如下:
var http = require("http"); var server = http.createServer(); server.on('request', function(req, res){ console.log('接收到客户端请求') }) server.on("request", function(req, res){ console.log('处理客户端请求') console.log(req.url); res.end(); }) server.on('request', function(req, res){ console.log('发送响应完毕') }) server.listen(1337, "127.0.0.1");
OK,執行程式碼,控制台輸出如下:
##控制台輸出
emitter.setMaxListeners(n)
EventEmitter類別的once方法
emitter.once(event, listener)
var http = require("http"); var server = http.createServer(); server.on('request', function(req, res){ console.log('接收到客户端请求') }) server.on("request", function(req, res){ console.log('处理客户端请求') console.log(req.url); res.end(); }) server.on('request', function(req, res){ console.log('发送响应完毕') }) server.listen(1337, "127.0.0.1");然後,在瀏覽器視窗中連續開啟兩次127.0.0.1:1337,控制台輸出如下:
顯示了兩個
var http = require("http"); var server = http.createServer(); server.once('request', function(req, res){ console.log('接收到客户端请求') }) server.on("request", function(req, res){ console.log('处理客户端请求') console.log(req.url); res.end(); }) server.once('request', function(req, res){ console.log('发送响应完毕') }) server.listen(1337, "127.0.0.1");控制台輸出如下:
請求處理2次,其餘只列印1次!
使用removeListener方法取消事件處理函數
##
var http = require("http"); var server = http.createServer(); var testFunction = function (req,res) { console.log('发送响应完毕') } server.on('request', function(req, res){ console.log('接收到客户端请求') }) server.on("request", function(req, res){ console.log('处理客户端请求') console.log(req.url); res.end(); }) server.on('request', testFunction) //删除 server.removeListener('request', testFunction) server.listen(1337, "127.0.0.1");
var http = require("http"); var server = http.createServer(); server.on("request", function(req, res){ console.log(req.url); }); //自定义事件 server.on("customEvent", function(arg1, arg2, arg3){ console.log("自定义事件被触发"); console.log(arg1); console.log(arg2); console.log(arg3); }); //触发自定义事件 server.emit('customEvent', '自定义参数1', '自定义参数2', '自定义参数3') server.listen(1337, "127.0.0.1");###這次不在瀏覽器視窗中輸入位址,直接執行程式碼查看控制台輸出,控制台輸出如下:############控制台輸出##########說明我們手動觸發了自訂事件,也就是customEvent。 ###
以上是node.js中EventEmitter類別各種用法程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!