2012-10-15 9 views
16

Ich bin neu in node.js und Java Script, ich kann die Bedeutung dieses ".on" Schlüsselworts nicht finden. wenn ich es mit einem anderen Wortcode ändere, scheiterte.In node.js "request.on" was ist das ".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); 
}); 

Antwort

18

Die auf Methode bindet ein Ereignis an ein Objekt.

Es ist ein Weg, um Ihre Absicht auszudrücken wenn dort etwas passiert (Daten gesendet oder Fehler in Ihrem Fall) ist, dann führen Sie die Funktion als Parameter hinzugefügt. Diese Art der Programmierung heißt Ereignisgesteuerte Programmierung. Sie könnten es bis aussehen wollen in der Wikipedia

In node.js gibt es eine Klasse namens EventEmitter, die Sie mit all dem Code bietet, die Sie für Basisereignisse benötigen, wenn Sie entscheiden, sie in Ihrem eigenen verwenden Code (was ich im Falle von node.js dringend empfehlen würde). Docs für node.js EventEmitter sind here

8

.on ist ein Verwendungsverfahren Ereignisbehandlungsroutine zu binden.

+0

danke, ich denke, ich habe noch nicht selbst mit node.js Dokumentation. – avicennasoftwarelabs

+0

Schauen Sie sich die Dokumentation für 'stream' an. Das Ergebnis einer HTTP-Anfrage ist ein lesbarer 'Stream' und enthält alle damit verbundenen Ereignisse und Methoden. – ebohlman

2

Der Rückruf für http.get mit einem einzigen Argument aufgerufen (die Sie req benannt haben). req, kurz für "Anfrage", ist ein gebräuchlicher Name, weil dieses Argument ein http.ClientRequest Objekt ist. Das http.ClientRequest-Objekt implementiert stream.Writable, und hier ist das wichtige Bit: Alle Streams sind Instanzen von EventEmitter.

EventEmitter hat eine Funktion namens on, die eine Listener-Funktion für ein bestimmtes Ereignis hinzufügt.

„Listener-Funktion“ ist nur ein anderer Name für „Callback-Funktion“

In Ihrem Beispiel haben Sie einen Listener für das data Ereignis und das error Ereignis hinzugefügt. Listener-Funktionen sind genannt (Ergo der Begriff "Rückruf") durch den EventEmitter.

Extra Credit

Wenn Sie jemals einen Zuhörer müssen aufhören zu hören (dh Sie nicht mehr Ihre Rückruf aufgerufen werden wollen), können Sie einen Listener mit der emitter.removeListener Funktion entfernen:

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

Wenn Sie nur ein Zuhörer einmal ausführen möchten, können Sie emitter.once anstelle der on Funktion verwenden, und dann werden Sie es nicht entfernen müssen:

res.once('error', myCallback);