最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js中的事件處理機制詳解

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

EventEmitter類

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

EventEmitter類的各種方法

event:代表事件名

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

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

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

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");

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

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


控制臺輸出

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

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('發(fā)送響應(yīng)完畢')
})

server.listen(1337, "127.0.0.1");

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


控制臺輸出

另外,在默認情況下,針對同一個指定事件,最多可以綁定10個時間處理函數(shù)??梢酝ㄟ^setMaxListeners方法修改最多可以綁定的事件處理函數(shù)數(shù)量,方法如下:

emitter.setMaxListeners(n)

EventEmitter類的once方法

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

emitter.once(event, listener)

做個試驗。

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

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('發(fā)送響應(yīng)完畢')
})

server.listen(1337, "127.0.0.1");

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


顯示了兩次

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

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('發(fā)送響應(yīng)完畢')
})

server.listen(1337, "127.0.0.1");

控制臺輸出如下:


請求處理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('接收到客戶端請求')
})

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");

運行代碼,在瀏覽器窗口輸入127.0.0.1:1337,控制臺輸出如下


控制臺輸出

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");

這次不在瀏覽器窗口中輸入地址,直接運行代碼查看控制臺輸出,控制臺輸出如下:


控制臺輸出

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

總結(jié)

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

相關(guān)文章

  • mac下安裝node.js的詳細步驟

    mac下安裝node.js的詳細步驟

    Node.js本質(zhì)上是一個JavaScript運行時環(huán)境,它提供了在服務(wù)器端運行JavaScript代碼的能力,這篇文章主要給大家介紹了關(guān)于mac下安裝node.js的詳細步驟,需要的朋友可以參考下
    2023-10-10
  • 詳解基于Koa2開發(fā)微信二維碼掃碼支付相關(guān)流程

    詳解基于Koa2開發(fā)微信二維碼掃碼支付相關(guān)流程

    這篇文章主要介紹了詳解基于Koa2開發(fā)微信二維碼掃碼支付相關(guān)流程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js斷點續(xù)傳的實現(xiàn)

    Node.js斷點續(xù)傳的實現(xiàn)

    最近做了個項目,應(yīng)項目需求,需要傳圖片、Excel等,幾M的大小可以很快就上傳到服務(wù)器,但是大的就需要斷點上傳,本文就介紹一下,感興趣的可以了解一下
    2021-05-05
  • Node.js 學(xué)習(xí)筆記之簡介、安裝及配置

    Node.js 學(xué)習(xí)筆記之簡介、安裝及配置

    本文是Node.js學(xué)習(xí)筆記系列文章的第一篇,主要給大家講解的是在Windows和Linux上安裝Node.js的方法。軟件安裝版本以0.12.0為例。希望大家能夠喜歡。
    2015-03-03
  • NodeJS配置CORS實現(xiàn)過程詳解

    NodeJS配置CORS實現(xiàn)過程詳解

    這篇文章主要介紹了NodeJS配置CORS實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • node.js快速部署vue代碼詳細步驟

    node.js快速部署vue代碼詳細步驟

    眾所周知Vue是現(xiàn)在前端最流行的框架之一,作為前端開發(fā)人員應(yīng)該要熟練的掌握它,下面這篇文章主要給大家介紹了關(guān)于node.js快速部署vue代碼的詳細步驟,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • node文件資源管理器的解壓縮從零實現(xiàn)

    node文件資源管理器的解壓縮從零實現(xiàn)

    這篇文章主要為大家介紹了node文件資源管理器的解壓縮從零實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Node.js調(diào)用DeepSeek?API的完整指南

    Node.js調(diào)用DeepSeek?API的完整指南

    本文將介紹如何使用?Node.js?調(diào)用?DeepSeek?API,實現(xiàn)流式對話并保存對話記錄,Node.js?版本使用現(xiàn)代異步編程方式實現(xiàn),支持流式處理和錯誤處理,文章通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2025-02-02
  • Windows下nodejs安裝及環(huán)境配置的實戰(zhàn)步驟

    Windows下nodejs安裝及環(huán)境配置的實戰(zhàn)步驟

    最近換了一個電腦,因為要使用到NodeJS,我將我自己的安裝步驟分享給大家,下面這篇文章主要給大家介紹了關(guān)于Windows下nodejs安裝及環(huán)境配置的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 在Express處理錯誤和未匹配路由的解決方法

    在Express處理錯誤和未匹配路由的解決方法

    在使用 Express 開發(fā) Web 應(yīng)用程序時,有效地處理錯誤和管理未匹配任何定義處理程序的路由至關(guān)重要,這確保了應(yīng)用程序的健壯性和更好的用戶體驗,本文給出了詳細的解決方法,需要的朋友可以參考下
    2024-01-01

最新評論

柳州市| 宁武县| 衡南县| 舞钢市| 永春县| 诏安县| 衡东县| 大宁县| 建始县| 杭州市| 三亚市| 新丰县| 安龙县| 钦州市| 安溪县| 济源市| 嵊州市| 溆浦县| 惠安县| 大方县| 宝清县| 北海市| 西丰县| 唐海县| 雅江县| 义乌市| 安龙县| 河北区| 康平县| 五华县| 兴海县| 庆元县| 盈江县| 贵溪市| 莱阳市| 黄大仙区| 布尔津县| 东至县| 响水县| 繁昌县| 育儿|