Heim  >  Artikel  >  Web-Frontend  >  Erstellen Sie einfach einen NodeJS-Server (5): event handler_node.js

Erstellen Sie einfach einen NodeJS-Server (5): event handler_node.js

WBOY
WBOYOriginal
2016-05-16 16:25:491042Durchsuche

Um verschiedenen Benutzern unterschiedliche Rückmeldungen zu geben, führen wir ein Event-Handler-Modul ein.

Dieses Modul heißt requestHandlers. Wir fügen zunächst zwei Platzhalterfunktionen hinzu: start() und upload().

requestHandlers.js-Code lautet wie folgt:

Code kopieren Der Code lautet wie folgt:

Funktion start() {
console.log("Dies wird aufgerufen, wenn auf /star zugegriffen wird.");
}

Funktion upload() {
console.log("Dies wird aufgerufen, wenn auf /upload zugegriffen wird.");
}

exports.start = start;
exports.upload = hochladen;

In einer realen Anwendung wird die Anzahl der Anforderungshandler weiter zunehmen, und wir möchten auf keinen Fall die Anforderung in der Route jedes Mal abschließen müssen, wenn es eine neue URL oder einen neuen Anforderungshandler gibt

Dem Hundeführer zuordnen und es immer wieder werfen.

Außerdem möchten wir nicht viel if request == x then call handler y im Routing haben, was den Code chaotisch und unprofessionell aussehen lässt.

Hier verwende ich das Konzept assoziativer Arrays, um diese Anforderung zu erfüllen. Wir übergeben eine Reihe von Anforderungshandlern durch ein Objekt und müssen dieses Objekt lose gekoppelt in die Funktion route() einfügen.

Wir führen dieses Objekt zunächst in die Hauptdatei index.js ein:

Code kopieren Der Code lautet wie folgt:

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");

var handle = {};
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;

server.start(router.route, handle);

Wenn ich zum Beispiel eine /show-Zuordnung hinzufügen möchte, füge einfach handle["/show"] requestHandlers.show hinzu und das war's;

Haha, wird der Code dadurch prägnanter und ordentlicher? !

Als nächstes übergeben wir das Handle-Objekt an den Server und ändern server.js wie folgt:

Code kopieren Der Code lautet wie folgt:
var http = require("http");
var url = require("url");
Funktion start(route, handle) {
Funktion onRequest(Anfrage, Antwort) {
var pathname = url.parse(request.url).pathname;
Console.log("Anfrage für „Pfadname“ erhalten.“);
route(Handle, Pfadname);
Response.writeHead(200, {"Content-Type": "text/plain"});
Response.write("Hello World");
Response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server wurde gestartet.");
}
exports.start = start;

Ändern Sie die Funktion route() in der Datei route.js entsprechend:

Code kopieren Der Code lautet wie folgt:
Funktion route(handle, pathname) {
console.log("Im Begriff, eine Anfrage für "Pfadname) weiterzuleiten);
if (typeof handle[pathname] === 'function') {
handle[Pfadname]();
} sonst {
console.log("Kein Anforderungshandler für "Pfadname gefunden);
}
}
exports.route = route;

Wir übergeben das Handle-Objekt als Parameter an den Server, der dann vom Router empfangen wird. Schließlich stellt der Router fest, ob der dem aktuellen Pfad entsprechende Anforderungshandler vorhanden ist.

Wir können die Anforderungsverarbeitungsfunktion vom übergebenen Objekt auf die gleiche Weise abrufen wie Elemente aus dem assoziativen Array, sodass wir einen einfachen und reibungslosen Ausdruck in der Form handle[Pfadname](); haben, der sich wie As anfühlt bereits erwähnt: „Hey, bitte hilf mir auf diesem Weg.“

Auf diese Weise können wir unterschiedliche Anfragen unterschiedlich bearbeiten.

Im nächsten Abschnitt werden wir den Code weiter modifizieren, um dem Server die Durchführung einiger tatsächlicher Feedback-Vorgänge zu ermöglichen.

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