成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js知識點(diǎn)詳解(二)HTTP模塊與事件模塊

Lionad-Morotar / 2581人閱讀

摘要:如果不能快速返回,就應(yīng)當(dāng)將其遷移到另一個(gè)進(jìn)程中模塊讓開發(fā)人員可以為事件設(shè)置偵聽器和處理器。我們需要給每個(gè)想要響應(yīng)的事件創(chuàng)建偵聽器

Node.js的http服務(wù)器

通過使用HTTP模塊的低級API,Node.js允許我們創(chuàng)建服務(wù)器和客戶端。剛開始學(xué)node的時(shí)候,我們都會遇到如下代碼:

var http = require("http");
http.createServer(function (req,res) {
    res.end("Hello World
");
}).listen(3000,"127.0.0.1");
console.log("Server running at http://127.0.0.1:3000");

這段代碼的包括了http模塊的信息,意思是:

1.從`Node.js`的核心請求HTTP模塊并賦予一個(gè)變量,以便在以后的腳本中使用。
于是腳本就可以訪問一些方法來通過`Node.js`使用`HTTP`。

2.使用`createServer`創(chuàng)建新的web服務(wù)器對象

3.腳本將一個(gè)匿名函數(shù)傳遞給服務(wù)器,告訴web服務(wù)器對象每當(dāng)其接收到請求時(shí)會發(fā)生的是什么

4.腳本第4行定義了web服務(wù)器的端口和主機(jī),這意味著可以使用`http://127.0.0.1:3000`
來訪問服務(wù)器
Http頭

對于每個(gè)HTTP請求和響應(yīng),都會發(fā)送HTTP頭,HTTP頭發(fā)送的是附加的信息,包括內(nèi)容類型、服務(wù)器發(fā)送響應(yīng)的日期以及HTTP狀態(tài)碼

http頭包含了許多信息,以下是我的百度首頁包含的http頭的信息:

由于我的百度首頁添加了較多的網(wǎng)站,所以這里的數(shù)據(jù)和讀者們的可能不一樣。從中我們可以看出百度是web服務(wù)器是BWS/1.1

下面是剛才上面那段代碼的http頭部信息:

Node.js中的重定向

在node中,我們可以很容易地創(chuàng)建一個(gè)簡單的服務(wù)器將訪問者重定向到另外一個(gè)Web頁面上,其準(zhǔn)則如下:

1.給客戶發(fā)送301響應(yīng)代碼,告訴客戶,資源已經(jīng)移到另一個(gè)位置了;
2.發(fā)送一個(gè)位置頭告訴客戶重定向到哪里。

相關(guān)代碼如下:

var http = require("http");
http.createServer(function (req,res) {
    res.writeHead(301,{
        "Location":"Http://example-2.com/web"
    });
    res.end();
}).listen(3000,"127.0.0.1");
console.log("Server funning at http://127.0.0.1:3000");

打開瀏覽器訪問http://127.0.0.1:3000頁面會被重定向。

響應(yīng)不同的請求

Node.js不單可以創(chuàng)建單一的響應(yīng),對于多種類型的請求,我們需要給應(yīng)用程序加一些路由。Node通過使用URL模塊讓這一切直截了當(dāng)。URL模塊使我們可以讀取URL、分析它然后對輸出做一些事情。

var url = require("url");
var requestURL = "http://example.com:1234/path?query=string#hash"

現(xiàn)在,我們可以分析請求的URL并從中截取內(nèi)容,例如,要想獲得主機(jī)名稱,我們可以輸入:

url.parse(requestURL).hostname

這時(shí),他將返回"example.com"

取得端口號可以輸入:

url.parse(requestURL).port

他將返回“1234”

事件模塊

Node.js被認(rèn)為是實(shí)現(xiàn)并發(fā)的最佳方法。Events(事件)模塊是Node.js的核心,許多其他模塊用它來圍繞著事件架構(gòu)功能。由于Node.js運(yùn)行于單一的線程中,任何同步代碼都是阻塞的。所以,在編寫Node.js代碼的時(shí)候我們要考慮一些簡單的規(guī)則:

1.別阻塞——`Node.js`是單線程的,如果代碼阻塞的話所有其他一切都停止了
2.快速返回——操作應(yīng)當(dāng)快速返回。如果不能快速返回,就應(yīng)當(dāng)將其遷移到另一個(gè)進(jìn)程中

Events模塊讓開發(fā)人員可以為事件設(shè)置偵聽器和處理器。在客戶端js中,我們可以對單擊事件設(shè)置一個(gè)監(jiān)聽器,然后在事件發(fā)生時(shí)執(zhí)行一些事情:

var tar = document.getElementById("target");
tar.addEventListener("click", function () {
   alert("click event fired,target was clicked"); 
},false);

當(dāng)然,這是在不考慮IE兼容性的一個(gè)例子,Node.js重點(diǎn)事件更常見的是網(wǎng)絡(luò)事件,包括:

1.來自web服務(wù)器的響應(yīng)
2.從文件讀取數(shù)據(jù)
3.從數(shù)據(jù)庫返回?cái)?shù)據(jù)

使用Events模塊我們首先要?jiǎng)?chuàng)建一個(gè)新的EventEmitter實(shí)例:

var EventEmitter= require("events").EventEmitter;
var test = new EventEmitter();

一旦在代碼中加入上述內(nèi)容,就可以添加事件和偵聽器了,我們可以按如下方法發(fā)送事件,比如:

test.emit("msg","the message send by node");

第一個(gè)參數(shù)是對事件進(jìn)行描述的字符串,以便用于偵聽器的匹配

為了接收消息,就必須添加偵聽器,偵聽器在事件觸發(fā)時(shí)處理它,例如:

test.on("message",function(data){
    console.log(data);
});

Events模塊addListener/on,once,removeListener,removeAllListeners,emit等基本的事件監(jiān)聽模式的方法實(shí)現(xiàn)。它與前端DOM樹上的事件并不相同,因?yàn)樗淮嬖诿芭?,逐層捕獲等屬于DOM的事件行為,也沒有preventDefault()、stopPropagation()、 stopImmediatePropagation() 等處理事件傳遞的方法。

1.類: events.EventEmitter:通過 require("events").EventEmitter 獲取 EventEmitter 類。
2.emitter.on(event, listener):添加一個(gè) listener 至特定事件的 listener 數(shù)組尾部。 返回 emitter,方便鏈?zhǔn)秸{(diào)用,下同。 

3.emitter.removeListener(event, listener)從一個(gè)事件的 listener 數(shù)組中刪除一個(gè) listener 

4.emitter.listeners(event)返回指定事件的 listener 數(shù)組 

更多詳情見:Node.js API 文檔

以下代碼展示了一條能在5秒內(nèi)自我毀滅的機(jī)密消息:

var EventEmitter = require("events").EventEmitter;
var secretMessage = new EventEmitter();

secretMessage.on("message", function (data) {
   console.log(data); 
});

secretMessage.on("self destruct", function () {
    console.log("the msg is destroyed!");
});

secretMessage.emit("message","this is a secret message.It will self deatruct in 5s");

setTimeout(function () {
   secretMessage.emit("self destruct");
},5000);

在這段腳本中,發(fā)送了兩個(gè)事件,有兩個(gè)偵聽器。當(dāng)腳本運(yùn)行時(shí),消息事件就發(fā)生,并由“message”處理器處理

Node.js中到處都用EventEmitter,所以掌握它是很重要的。Node.js通過I/O操作獲得的數(shù)據(jù)并廣泛使用Events模塊來支持異步編程

常見問題解答:

問:對于一個(gè)事件是否有最大偵聽器數(shù)量的限制?
答:默認(rèn)情況下,如果事件有操作10個(gè)偵聽器,它會發(fā)出警告。不過,可以使用emitter.setMaxListener(n)來更改這個(gè)數(shù)量

問:是否可以偵聽所有發(fā)送出來的事件?
答:不能。我們需要給每個(gè)想要響應(yīng)的事件創(chuàng)建偵聽器

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85399.html

相關(guān)文章

  • Node.js識點(diǎn)詳解(一)基礎(chǔ)部分

    摘要:基礎(chǔ)的端到端的基準(zhǔn)測試顯示大約比快八倍。所謂單線程,就是指一次只能完成一件任務(wù)。在服務(wù)器端,異步模式甚至是唯一的模式,因?yàn)閳?zhí)行環(huán)境是單線程的,如果允許同步執(zhí)行所有請求,服務(wù)器性能會急劇下降,很快就會失去響應(yīng)。 模塊 Node.js 提供了exports 和 require 兩個(gè)對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個(gè)模塊的接口,即所獲取模塊的 e...

    whjin 評論0 收藏0
  • Node.js識點(diǎn)詳解(三)緩沖模塊

    摘要:緩沖模塊起初就是為瀏覽器而設(shè)計(jì)的,所以能很好的處理編碼的字符串,但不能很好的處理二進(jìn)制數(shù)據(jù)。有如下三個(gè)主要的流標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)錯(cuò)誤可讀流如果說,緩沖區(qū)是處理原始數(shù)據(jù)的方式的話,那么流通常是移動(dòng)數(shù)據(jù)的方式。該方法讓可讀流繼續(xù)觸發(fā)事件。 緩沖(buffer)模塊 js起初就是為瀏覽器而設(shè)計(jì)的,所以能很好的處理unicode編碼的字符串,但不能很好的處理二進(jìn)制數(shù)據(jù)。這是Node.js的...

    plus2047 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    muddyway 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<