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

Node.js中HTTP模塊與事件模塊詳解

 更新時間:2014年11月14日 17:24:32   投稿:hebedich  
這篇文章主要詳細(xì)介紹了Node.js中HTTP模塊與事件模塊的相關(guān)資料,需要的朋友可以參考下

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

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

復(fù)制代碼 代碼如下:

var http = require('http');
http.createServer(function (req,res) {
    res.end('Hello World\n');
}).listen(3000,"127.0.0.1");
console.log("Server funning at

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

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

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

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

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

Http頭

對于每個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)建一個簡單的服務(wù)器將訪問者重定向到另外一個Web頁面上,其準(zhǔn)則如下:

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

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

復(fù)制代碼 代碼如下:

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頁面會被重定向。

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

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

復(fù)制代碼 代碼如下:

var url = require('url');
var requestURL = "

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

復(fù)制代碼 代碼如下:

url.parse(requestURL).hostname

這時,他將返回"example.com"

取得端口號可以輸入:

復(fù)制代碼 代碼如下:

url.parse(requestURL).port

他將返回“1234”

事件模塊

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

1.別阻塞——`Node.js`是單線程的,如果代碼阻塞的話所有其他一切都停止了
2.快速返回——操作應(yīng)當(dāng)快速返回。如果不能快速返回,就應(yīng)當(dāng)將其遷移到另一個進(jìn)程中
Events模塊讓開發(fā)人員可以為事件設(shè)置偵聽器和處理器。在客戶端js中,我們可以對單擊事件設(shè)置一個監(jiān)聽器,然后在事件發(fā)生時執(zhí)行一些事情:

復(fù)制代碼 代碼如下:

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

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

1.來自web服務(wù)器的響應(yīng)
2.從文件讀取數(shù)據(jù)
3.從數(shù)據(jù)庫返回數(shù)據(jù)
使用Events模塊我們首先要創(chuàng)建一個新的EventEmitter實例:

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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

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

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

復(fù)制代碼 代碼如下:

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

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

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

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

4.emitter.listeners(event)返回指定事件的 listener 數(shù)組
更多詳情見:Node.js API 文檔

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

復(fù)制代碼 代碼如下:

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ā)送了兩個事件,有兩個偵聽器。當(dāng)腳本運行時,消息事件就發(fā)生,并由“message”處理器處理

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

常見問題解答:

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

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

相關(guān)文章

  • 如何從頭實現(xiàn)一個node.js的koa框架

    如何從頭實現(xiàn)一個node.js的koa框架

    這篇文章主要介紹了如何從頭實現(xiàn)一個node.js的koa框架,koa.js是最流行的node.js后端框架之一,有很多網(wǎng)站都使用koa進(jìn)行開發(fā),同時社區(qū)也涌現(xiàn)出了一大批基于koa封裝的企業(yè)級框架。,需要的朋友可以參考下
    2019-06-06
  • Node.js事件循環(huán)(Event Loop)的使用

    Node.js事件循環(huán)(Event Loop)的使用

    事件循環(huán)是其非阻塞I/O和高并發(fā)能力的核心機(jī)制,本文主要介紹了Node.js事件循環(huán)(Event Loop)的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • node.js實現(xiàn)多圖片上傳實例

    node.js實現(xiàn)多圖片上傳實例

    這篇文章主要介紹了node.js實現(xiàn)多圖片上傳實例,包括路由、控制器和視圖的源碼,重點在圖片上傳處理程序,需要的朋友可以參考下
    2014-06-06
  • node.js實現(xiàn)BigPipe詳解

    node.js實現(xiàn)BigPipe詳解

    這篇文章主要介紹了node.js實現(xiàn)BigPipe詳解,BigPipe是 Facebook 開發(fā)的優(yōu)化網(wǎng)頁加載速度的技術(shù),BigPipe 的核心概念就是只用一個 HTTP 請求,只是頁面元素不按順序發(fā)送而已,需要的朋友可以參考下
    2014-12-12
  • Express下采用bcryptjs進(jìn)行密碼加密的方法

    Express下采用bcryptjs進(jìn)行密碼加密的方法

    本篇文章主要介紹了Express下采用bcryptjs進(jìn)行密碼加密的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Node.js引入UIBootstrap的方法示例

    Node.js引入UIBootstrap的方法示例

    這篇文章主要介紹了Node.js引入UIBootstrap的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • express默認(rèn)日志組件morgan的方法

    express默認(rèn)日志組件morgan的方法

    morgan是express默認(rèn)的日志中間件,這篇文章主要介紹了express默認(rèn)日志組件morgan的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 使用Node.js實現(xiàn)HTTP 206內(nèi)容分片的教程

    使用Node.js實現(xiàn)HTTP 206內(nèi)容分片的教程

    這篇文章主要介紹了使用Node.js實現(xiàn)HTTP 206內(nèi)容分片的教程,Node.js是一款用于服務(wù)器端的JavaScript框架,需要的朋友可以參考下
    2015-06-06
  • Node.js Addons翻譯(C/C++擴(kuò)展)

    Node.js Addons翻譯(C/C++擴(kuò)展)

    這篇文章主要介紹了Node.js Addons翻譯(C/C++擴(kuò)展) 的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 使用Express處理請求和托管靜態(tài)資源方式

    使用Express處理請求和托管靜態(tài)資源方式

    這篇文章主要介紹了使用Express處理請求和托管靜態(tài)資源方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

垣曲县| 宜昌市| 辽源市| 浦东新区| 临沂市| 郯城县| 高阳县| 错那县| 永兴县| 五河县| 多伦县| 永新县| 雅安市| 宁都县| 胶南市| 额尔古纳市| 盈江县| 哈尔滨市| 甘德县| 仁化县| 桐乡市| 堆龙德庆县| 聊城市| 体育| 新巴尔虎左旗| 正宁县| 河津市| 安溪县| 四川省| 弋阳县| 盐边县| 林芝县| 班戈县| 南汇区| 饶平县| 康平县| 波密县| 台前县| 安西县| 仁寿县| 芮城县|