亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js中的事件處理機(jī)制詳解

 更新時(shí)間:2016年11月26日 09:43:03   作者:huber  
相信接觸過(guò)編程的同學(xué)應(yīng)該都了解,在訪問(wèn)任何網(wǎng)頁(yè)的時(shí)候,會(huì)伴隨著許多的事件,例如點(diǎn)擊菜單,移動(dòng)鼠標(biāo)等等。那么node.js是如何處理的?下面通過(guò)這篇文章就來(lái)給大家詳細(xì)的介紹下node.js中的事件處理機(jī)制,有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

EventEmitter類(lèi)

在Node.js的用于實(shí)現(xiàn)各種事件處理的event模塊中,定義了一個(gè)EventEmitter類(lèi)。所有可能觸發(fā)事件的對(duì)象都是一個(gè)集成了EventEmitter類(lèi)的子類(lèi)的實(shí)例對(duì)象,在Node.js中,為EventEmitter類(lèi)定義了許多方法,所有與對(duì)象的事件處理函數(shù)的綁定及解除相關(guān)的處理均依靠這些方法的調(diào)用來(lái)執(zhí)行。

EventEmitter類(lèi)的各種方法

event:代表事件名

listener:代表事件處理函數(shù)

中括號(hào)內(nèi)的參數(shù)代表該參數(shù)為可選參數(shù)

方法名與參數(shù) 描述
addListener(event,listener)  對(duì)指定事件綁定事件處理函數(shù)
on(event, listener)  對(duì)指定事件綁定事件處理函數(shù)(addListener方法的別名)
once(event, listener)  對(duì)指定事件指定只執(zhí)行一次的事件處理函數(shù)
removeListener(event, listener)  對(duì)指定事件接觸事件處理函數(shù)
setMaxListeners(n)  指定事件處理函數(shù)的最大數(shù)量,n為正數(shù)值,代表最大的可指定事件處理函數(shù)的數(shù)量
listeners(event)  獲取指定事件的所有事件處理函數(shù)
emit(event, [arg1], [arg2], [...])  手工觸發(fā)指定事件

EventEmitter類(lèi)的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");

在這段代碼中,我們指定當(dāng)服務(wù)器接收到客戶端請(qǐng)求時(shí),在你控制臺(tái)窗口中輸出客戶端請(qǐng)求的目標(biāo)的URL地址,并使用響應(yīng)對(duì)象的end方法立即結(jié)束響應(yīng)。

執(zhí)行代碼,然后在瀏覽器窗口中輸入:http://localhost:1337://,控制臺(tái)輸出如下:


控制臺(tái)輸出

當(dāng)然,也可以通過(guò)多個(gè)on方法的執(zhí)行來(lái)對(duì)同一個(gè)事件綁定多個(gè)事件處理函數(shù)。如下:

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

server.on('request', function(req, res){ 
 console.log('接收到客戶端請(qǐng)求')
})

server.on("request", function(req, res){ 
 console.log('處理客戶端請(qǐng)求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('發(fā)送響應(yīng)完畢')
})

server.listen(1337, "127.0.0.1");

OK,執(zhí)行代碼,控制臺(tái)輸出如下:


控制臺(tái)輸出

另外,在默認(rèn)情況下,針對(duì)同一個(gè)指定事件,最多可以綁定10個(gè)時(shí)間處理函數(shù)。可以通過(guò)setMaxListeners方法修改最多可以綁定的事件處理函數(shù)數(shù)量,方法如下:

emitter.setMaxListeners(n)

EventEmitter類(lèi)的once方法

EventEmiiter類(lèi)的once方法與on方法類(lèi)似,作用均為對(duì)指定事件綁定事件處理函數(shù),區(qū)別在于,當(dāng)事件處理函數(shù)執(zhí)行一次后立即被接觸,即該事件處理函數(shù)只會(huì)被執(zhí)行一次。once方法所用參數(shù)與on方法所用參數(shù)相同,如下:

emitter.once(event, listener)

做個(gè)試驗(yàn)。

還是執(zhí)行如下代碼(同上):

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

server.on('request', function(req, res){ 
 console.log('接收到客戶端請(qǐng)求')
})

server.on("request", function(req, res){ 
 console.log('處理客戶端請(qǐng)求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('發(fā)送響應(yīng)完畢')
})

server.listen(1337, "127.0.0.1");

然后,在瀏覽器窗口中連續(xù)打開(kāi)兩次127.0.0.1:1337,控制臺(tái)輸出如下:


顯示了兩次

然后將on事件修改為once事件,代碼如下:

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

server.once('request', function(req, res){ 
 console.log('接收到客戶端請(qǐng)求')
})

server.on("request", function(req, res){ 
 console.log('處理客戶端請(qǐng)求') 
 console.log(req.url); 
 res.end();
})

server.once('request', function(req, res){
 console.log('發(fā)送響應(yīng)完畢')
})

server.listen(1337, "127.0.0.1");

控制臺(tái)輸出如下:


請(qǐng)求處理2次,其余只打印1次!

使用removeListener方法取消事件處理函數(shù)

代碼如下:

var http = require("http");
var server = http.createServer();
var testFunction = function (req,res) {
 console.log('發(fā)送響應(yīng)完畢')
}

server.on('request', function(req, res){
 console.log('接收到客戶端請(qǐng)求')
})

server.on("request", function(req, res){
 console.log('處理客戶端請(qǐng)求')
 console.log(req.url);
 res.end();
})

server.on('request', testFunction)
//刪除
server.removeListener('request', testFunction)
server.listen(1337, "127.0.0.1");

運(yùn)行代碼,在瀏覽器窗口輸入127.0.0.1:1337,控制臺(tái)輸出如下


控制臺(tái)輸出

emit方法:自定義事件并將其觸發(fā)

代碼如下:

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("自定義事件被觸發(fā)");
 console.log(arg1);
 console.log(arg2);
 console.log(arg3);
});

//觸發(fā)自定義事件
server.emit('customEvent', '自定義參數(shù)1', '自定義參數(shù)2', '自定義參數(shù)3')
server.listen(1337, "127.0.0.1");

這次不在瀏覽器窗口中輸入地址,直接運(yùn)行代碼查看控制臺(tái)輸出,控制臺(tái)輸出如下:


控制臺(tái)輸出

說(shuō)明我們手動(dòng)觸發(fā)了自定義事件,也就是customEvent。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用node.js能有所幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    這篇文章主要介紹了nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳,需要的朋友可以參考下
    2015-02-02
  • Node.js實(shí)現(xiàn)發(fā)送郵件功能

    Node.js實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了Node.js實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Nodejs+express+ejs簡(jiǎn)單使用實(shí)例代碼

    Nodejs+express+ejs簡(jiǎn)單使用實(shí)例代碼

    本篇文章主要介紹了Nodejs+express+ejs簡(jiǎn)單使用實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • nodejs 圖解express+supervisor+ejs的用法(推薦)

    nodejs 圖解express+supervisor+ejs的用法(推薦)

    下面小編就為大家?guī)?lái)一篇nodejs 圖解express+supervisor+ejs的用法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Node.Js生成比特幣地址代碼解析

    Node.Js生成比特幣地址代碼解析

    本篇文章給大家分享了關(guān)于用NODE.JS生成比特幣地址的相關(guān)代碼,對(duì)此有興趣的讀者們可以參考測(cè)試下。
    2018-04-04
  • 關(guān)于npm?i幾種常見(jiàn)命令的區(qū)別詳解

    關(guān)于npm?i幾種常見(jiàn)命令的區(qū)別詳解

    npm(Node.js Package Manager)是一個(gè)Node.js的包管理工具,用來(lái)解決Node.js代碼部署問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于npm?i幾種常見(jiàn)命令的那點(diǎn)事,需要的朋友可以參考下
    2023-03-03
  • node后端服務(wù)保活的實(shí)現(xiàn)

    node后端服務(wù)?;畹膶?shí)現(xiàn)

    這篇文章主要介紹了node后端服務(wù)?;畹膶?shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng))

    nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng))

    本文主要介紹了nodejs部署到騰訊云服務(wù)器的實(shí)現(xiàn)(寶塔面板linux系統(tǒng)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • node.js中 stream使用教程

    node.js中 stream使用教程

    Stream 是一個(gè)抽象接口,Node 中有很多對(duì)象實(shí)現(xiàn)了這個(gè)接口。例如,對(duì)http 服務(wù)器發(fā)起請(qǐng)求的request 對(duì)象就是一個(gè) Stream,還有stdout(標(biāo)準(zhǔn)輸出)。
    2016-08-08
  • NodeJs使用Mysql模塊實(shí)現(xiàn)事務(wù)處理實(shí)例

    NodeJs使用Mysql模塊實(shí)現(xiàn)事務(wù)處理實(shí)例

    本篇文章主要介紹了NodeJs使用Mysql模塊實(shí)現(xiàn)事務(wù)處理 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論