2012-10-15 67 views
16

我是新的node.js和java腳本,我找不到這個「.on」關鍵字的含義。當我改變它與另一個字代碼失敗。在node.js「request.on」這是什麼「.on」

var req = http.get("http://www.google.com", function(res) { 
    console.log("Got response: " + res.statusCode); 

res.on('data', function (chunk) { 
}); 

}).on('error', function(e) { 
console.log("Got error: " + e.message); 
}); 

回答

18

on方法事件綁定到對象。

這是表達你的意圖如果有事情發生(數據發送或錯誤在您的案件)的方式,然後執行功能附加作爲參數。這種編程風格被稱爲事件驅動編程。 你可能想看看它在Wikipedia

在node.js中,有一個叫EventEmitter類,它爲您提供了所有的你,如果你決定在你自己的使用他們需要的基本事件的代碼代碼(我強烈建議在node.js的情況下)。對於node.js的EventEmitter文檔是here

8

.on是事件處理程序結合的方法中。

+0

謝謝,我想我還沒有使用node.js文檔自己組裝。 – avicennasoftwarelabs

+0

查看'stream'的文檔。 HTTP請求的結果是一個可讀的'stream',並且將具有與此相關的所有事件和方法。 – ebohlman

2

http.get的函數調用時需要一個參數(你已經命名req)。 req是「請求」的縮寫,是一個常用名稱,因爲此參數是http.ClientRequest對象。 http.ClientRequest對象實現了stream.Writable,這裏有一個重要的位:所有流都是EventEmitter的實例。

EventEmitter有一個名爲on的函數,它爲指定事件添加一個偵聽器函數。

「監聽功能」是「回調函數」

在您的例子只是一個名字,你已經加入了對data事件和error事件的監聽器。監聽器功能被EventEmitter稱爲(也就是術語「回調」)。

加分

如果你需要一個監聽器,停止監聽(即,你不再想被稱爲回調),可以刪除與emitter.removeListener功能的監聽器:

var myCallback = function(e) { console.log('Got error: ' + e.message); } 
res.on('error', myCallback); 
// do some things... 
res.removeListener('error', myCallback); 

如果你只想要一個偵聽器運行一次,你可以使用emitter.once代替on功能,然後你將不必將其刪除:

res.once('error', myCallback);