Wenn Sie ein Anfänger sind, haben Sie eine Szene entdeckt, die sich völlig von Ihrem vorherigen Standpunkt unterscheidet - wofür wird JavaScript in Ihren Augen verwendet? Spezialeffekte? Oder ist es nur eine Interaktion mit dem Kunden? Es kann gesagt werden, dass JavaScript zuerst im Browser ausgeführt wurde. Wenn Sie jedoch so darüber nachdenken, bietet der Browser nur einen Kontext, der definiert, was Sie mit JavaScript tun können. Hier können Sie es sich als ein ähnliches Unternehmen vorstellen. Das Unternehmen definiert, was Sie hier tun können, aber es sagt nicht viel darüber aus, was die JavaScript -Sprache selbst tun kann. Tatsächlich kann JavaScript als vollständige Sprache in verschiedenen Kontexten verwendet werden und spiegelt unterschiedliche Fähigkeiten wider. Die hier erwähnten NodeJs sollen es tatsächlich unverblümt ausdrücken, was einen Kontext und eine laufende Umgebung bietet, mit der JavaScript -Code im Backend ausgeführt werden kann (außerhalb der Browserumgebung).
Der Kern des Routings ist Routing. Wie der Name schon sagt, bezieht sich das Routing auf die verschiedenen Verarbeitungsmethoden, die wir für verschiedene URLs behandeln müssen, z. B. die Geschäftslogik der Verarbeitung/Start -Geschäftslogik und Verarbeitung/Upload -Modul. Logik ist inkonsistent. In der Realität wird der Routing -Prozess im Routing -Modul "enden", und das Routing -Modul ist kein reales Modul, das "Maßnahmen gegen die Anfrage ergriffen", da unsere Anwendung sonst nicht gut erweitert wird, wenn er komplexer wird.
Hier erstellen wir zunächst ein Modul namens RequestHandlers und fügen für jeden Anforderungshandler eine Platzhalterfunktion hinzu:
Die Codekopie lautet wie folgt:
Funktion start () {
console.log ("Anfragenhandler" Start "wurde genannt.");
Funktionsschlaf (Millisekunden) {
var startTime = new Date (). GetTime ();
während (neuer Datum (). GetTime () <StartTime+Millisekunden);
}
Schlaf (10000);
zurück "Hallo Start";
}
Funktion upload () {
console.log ("Anfrage -Handler" Upload "wurde genannt.");
zurück "Hallo Upload";
}
exports.Start = start;
exports.Upload = Upload;
Auf diese Weise können wir den Anforderungshandler und das Routing -Modul anschließen, damit die Route "eine Möglichkeit zu folgen" erstellt. Danach haben wir uns entschieden, eine Reihe von Anforderungshandlern über ein Objekt zu übergeben, und wir müssen locker gekoppelte Methoden verwenden, um dieses Objekt in die Funktion Router (), den Hauptdatei index.js, zu injizieren:
Die Codekopie lautet wie folgt:
var Server = Request ("./ Server");
var router = required ("./router");
var RequestHandlers = Request ("./ RequestHandlers");
var Handle = {};
Handle ["/"] = RequestHandlers.Start;
Handle ["/start"] = RequestHandlers.Start;
Handle ["/Upload"] = RequestHandlers.Upload;
server.start (Router.Route, Handle);
Wie oben gezeigt, ist es einfach, verschiedene URLs demselben Anforderungshandler zuzuordnen: Fügen Sie einfach eine Eigenschaft mit dem Schlüssel hinzu. Auf diese Weise können wir einfach konfigurieren / starten und / /, um beide Anfragen zu starten. Nachdem wir die Definition des Objekts beendet haben, übergeben wir es als zusätzlichen Parameter an den Server. Siehe Server.js:
Die Codekopie lautet wie folgt:
var http = required ("http");
var url = erfordern ("url");
Funktionsstart (Route, Handle) {
Funktion OnRequest (Anfrage, Antwort) {
var pathname = url.parse (request.url) .PathName;
console.log ("Anfrage für"+pathname+"empfangen.");
Route (Handle, Pfadname);
response.writeHead (200, {"Content-Type": "Text/Plain"});
var content = Route (Handle, Pathname);
Antwort.Write (Inhalt);
Antwort.end ();
}
http.createServer (OnRequest) .Listen (8888);
console.log ("Server hat begonnen.");
}
exports.Start = start;
Auf diese Weise wird der Parameter des Handels zur Funktion start () hinzugefügt, und das Handle -Objekt wird als erster Parameter an die Route () -Rallback -Funktion übergeben. Im Folgenden definiert Route.js:
Die Codekopie lautet wie folgt:
Funktionsstrecke (Handle, Pathname) {
console.log ("kurz davor, eine Anfrage nach"+ pathname) zu leiten);
if (typeof handle [pathName] === 'Funktion') {
Returnhandle [Pathname] ();
}anders{
console.log ("Kein Anfrage -Handler für"+pathname);
zurück "404 nicht gefunden";
}
}
Exports.Route = Route;
Über den oben genannten Code prüfen wir zunächst, ob der Anforderungshandler, der dem angegebenen Pfad entspricht, vorhanden ist, und wenn ja, werden wir die entsprechende Funktion direkt aufrufen. Wir können die Anforderungshandhabungsfunktion aus dem übergebenen Objekt genauso wie Elemente aus dem assoziativen Array, dh Handle [Pathname] (), abrufen. Ein solcher Ausdruck gibt den Menschen das Gefühl, dass es heißt: "Hallo, bitte hilf mir mit diesem Weg." Der Programmlaufeffekt ist wie folgt: