Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung des HTTP-Moduls und des Ereignismoduls in Node.js

Detaillierte Erläuterung des HTTP-Moduls und des Ereignismoduls in Node.js

高洛峰
高洛峰Original
2016-12-26 10:01:461005Durchsuche

http-Server für Node.js

Node.js ermöglicht uns die Erstellung von Servern und Clients mithilfe der Low-Level-API des HTTP-Moduls. Als wir zum ersten Mal mit dem Erlernen von Node begannen, stießen wir alle auf den folgenden Code:

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://127.0.0.1:3000");

Dieser Code enthält Informationen zum http-Modul, was bedeutet:

1. Von „Node.js“. Core fordert das HTTP-Modul an und weist es einer Variablen zur Verwendung in späteren Skripten zu.
Das Skript hat dann Zugriff auf Methoden zur Verwendung von „HTTP“ über „Node.js“.

2. Verwenden Sie „createServer“, um ein neues Webserverobjekt zu erstellen

3. Das Skript übergibt eine anonyme Funktion an den Server und teilt dem Webserverobjekt mit, was passieren wird, wenn es eine Anfrage erhält . Was

4. Zeile 4 des Skripts definiert den Port und Host des Webservers, was bedeutet, dass auf den Server über „http://127.0.0.1:3000“ zugegriffen werden kann
HTTP-Header

Für jede HTTP-Anfrage und -Antwort wird ein HTTP-Header gesendet. Der HTTP-Header sendet zusätzliche Informationen, einschließlich des Inhaltstyps, des Datums, an dem der Server die Antwort gesendet hat, und des HTTP-Statuscodes

http Der Header enthält viele Informationen. Das Folgende sind die http-Header-Informationen, die in meiner Baidu-Homepage enthalten sind:

Detaillierte Erläuterung des HTTP-Moduls und des Ereignismoduls in Node.jsDa meine Baidu-Homepage weitere Websites hinzugefügt hat , die Daten hier Es können von den Lesern abweichen. Daraus können wir ersehen, dass Baidus Webserver BWS/1.1 ist

Das Folgende sind die http-Header-Informationen des obigen Codes:

Detaillierte Erläuterung des HTTP-Moduls und des Ereignismoduls in Node.jsNode.js-Umleitung im Knoten

Im Knoten können wir ganz einfach einen einfachen Server erstellen, um Besucher auf eine andere Webseite umzuleiten. Die Richtlinien lauten wie folgt:

An den Kunden senden Sie einen 301-Antwortcode dem Client, dass die Ressource an einen anderen Standort verschoben wurde;

2. Senden Sie einen Standortheader, um dem Client mitzuteilen, wohin er umgeleitet werden soll.



Der relevante Code lautet wie folgt:

Öffnen Sie den Browser, um auf die Seite http://127.0.0.1:3000 zuzugreifen. Sie werden weitergeleitet.
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");

Auf verschiedene Anfragen antworten

Node.js kann nicht nur eine einzelne Antwort erstellen, sondern für mehrere Arten von Anfragen müssen wir der Anwendung einige Routen hinzufügen. Node vereinfacht dies mithilfe des URL-Moduls. Das URL-Modul ermöglicht es uns, eine URL zu lesen, sie zu analysieren und dann etwas mit der Ausgabe zu tun.

Jetzt können wir die angeforderte URL analysieren und den Inhalt daraus abfangen. Um beispielsweise den Hostnamen zu erhalten, können wir Folgendes eingeben:
var url = require('url');
var requestURL = "http://example.com:1234/path?query=string#hash"

Zu diesem Zeitpunkt er wird „example.com“ zurückgeben
url.parse(requestURL).hostname

Um die Portnummer zu erhalten, können Sie Folgendes eingeben:

Es wird „1234“ zurückgegeben
url.parse(requestURL).port


Ereignismodul

Node.js gilt als der beste Weg, um Parallelität zu erreichen. Das Events-Modul ist der Kern von Node.js und wird von vielen anderen Modulen verwendet, um Funktionen rund um Events zu entwickeln. Da Node.js in einem einzelnen Thread ausgeführt wird, blockiert jeglicher Synchronisierungscode. Daher sind beim Schreiben von Node.js-Code einige einfache Regeln zu beachten:

1. Nicht blockieren – „Node.js“ ist Single-Threaded, wenn der Code blockiert, stoppt alles andere

2 . Schnelle Rückkehr – Der Betrieb sollte schnell zurückkehren. Wenn es nicht schnell zurückgegeben werden kann, sollte es in einen anderen Prozess verschoben werden

Das Modul „Ereignisse“ ermöglicht es Entwicklern, Listener und Handler für Ereignisse einzurichten. In Client-JS können wir einen Listener für das Klickereignis festlegen und dann etwas ausführen, wenn das Ereignis auftritt:

Natürlich ist dies ein Beispiel ohne Berücksichtigung der IE-Kompatibilität, die Schlüsselereignisse von Node .js sind häufigere Netzwerkereignisse, einschließlich:
var tar = document.getElementById("target");
tar.addEventListener("click", function () {
   alert("click event fired,target was clicked"); 
},false);

1. Antwort vom Webserver

2. Daten aus der Datenbank zurückgeben

Ereignismodul verwenden Wir müssen zuerst ein neues erstellen EventEmitter-Instanz:


Sobald der obige Inhalt zum Code hinzugefügt wurde, können Ereignisse und Listener wie folgt hinzugefügt werden, z. B.:

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

Der erste Parameter ist eine Zeichenfolge, die das Ereignis beschreibt, sodass es für den Listener-Abgleich verwendet werden kann

test.emit('msg','the message send by node');
Um die Nachricht zu empfangen, muss ein Listener hinzugefügt werden, und der Listener befindet sich im Ereignis. Verarbeiten Sie es, wenn es ausgelöst wird, zum Beispiel:

Ereignismodul addListener/on, Once, RemoveListener, RemoveAllListeners, Emit und andere grundlegende Methodenimplementierungen für den Ereignisüberwachungsmodus. Es ist nicht dasselbe wie die Ereignisse im Front-End-DOM-Baum, da es kein zum DOM gehörendes Ereignisverhalten wie Bubbling und Layer-by-Layer-Erfassung aufweist und es keine Methoden zur Verarbeitung der Ereignisübermittlung wie PreventDefault gibt (), stopPropagation(), stopImmediatePropagation() usw.

test.on('message',function(data){
    console.log(data);
});
1. Klasse: events.EventEmitter: Erhalten Sie die EventEmitter-Klasse über require('events').EventEmitter.

2.emitter.on(event, listener): Fügen Sie am Ende des Listener-Arrays einen Listener für ein bestimmtes Ereignis hinzu. Geben Sie den Emitter zurück, um Kettenaufrufe zu erleichtern, siehe unten.

3.emitter.removeListener(event, listener) entfernt einen Listener aus dem Listener-Array eines Ereignisses

4.emitter.listeners(event) gibt das Listener-Array des angegebenen Ereignisses zurück

Mehr Weitere Details finden Sie unter: Node.js API-Dokumentation

Der folgende Code zeigt eine vertrauliche Nachricht, die sich in 5 Sekunden selbst zerstören kann:

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

在这段脚本中,发送了两个事件,有两个侦听器。当脚本运行时,消息事件就发生,并由“message”处理器处理

在Node.js中到处都用EventEmitter,所以掌握它是很重要的。Node.js通过I/O操作获得的数据并广泛使用Events模块来支持异步编程

常见问题解答:

问:对于一个事件是否有最大侦听器数量的限制?
答:默认情况下,如果事件有操作10个侦听器,它会发出警告。不过,可以使用emitter.setMaxListener(n)来更改这个数量

问:是否可以侦听所有发送出来的事件?
答:不能。我们需要给每个想要响应的事件创建侦听器

更多Detaillierte Erläuterung des HTTP-Moduls und des Ereignismoduls in Node.js相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn