Wir möchten das Antwortobjekt (erhalten Sie von der Rückruffunktion des Servers onRequest ()) über die Anforderungsrouting an den Anforderungshandler. Der Handler kann dann die Funktionen des Objekts verwenden, um auf die Anfrage zu antworten.
Nehmen wir zuerst Änderungen an Server.js vor:
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, Antwort);
}
http.createServer (OnRequest) .Listen (8888);
console.log ("Server hat begonnen.");
}
exports.Start = start;
Wir übergeben das Antwortobjekt als dritter Parameter an die Funktion Route () und entfernen den gesamten Antwortaufruf im ONREQUEST () -Handler, da wir möchten, dass dieser Teil der Arbeiten die Funktion Route () vervollständigen lässt.
Als nächstes ändern Sie Router.js:
Die Codekopie lautet wie folgt:
Funktionsstrecke (Handle, Pfadname, Antwort) {
console.log ("kurz davor, eine Anfrage nach" + pathname) zu leiten);
if (typeof handle [pathName] === 'Funktion') {
Handle [Pathname] (Antwort);
} anders {
console.log ("Kein Anfrage -Handler für" + pathname);
Antwort.WriteHead (404, {"Inhaltstyp": "text/plain"});
Antwort.Write ("404 nicht gefunden");
Antwort.end ();
}
}
Exports.Route = Route;
Das gleiche Muster: Im Vergleich zur vorherigen Erfassung des Rückgabewerts aus dem Anforderungshandler wird dies stattdessen direkt das Antwortobjekt übergeben. Wenn es keinen entsprechenden Anforderungsprozessor gibt, um ihn zu verarbeiten, gibt wir den Fehler "404" direkt zurück.
Anschließend ändern Sie RequestHandler.js:
Die Codekopie lautet wie folgt:
var exec = required ("chirt_process"). exec;
Funktion start (Antwort) {
console.log ("Anfragenhandler" Start "wurde genannt.");
exec ("ls -lah", Funktion (Fehler, stdout, stderr) {
response.writeHead (200, {"Content-Type": "Text/Plain"});
response.write (stdout);
Antwort.end ();
});
}
Funktion hochladen (Antwort) {
console.log ("Anfrage -Handler" Upload "wurde genannt.");
response.writeHead (200, {"Content-Type": "Text/Plain"});
Antwort.Write ("Hallo Upload");
Antwort.end ();
}
exports.Start = start;
exports.Upload = Upload;
Unsere Handler -Funktion muss den Antwortparameter empfangen, um direkt auf die Anfrage zu reagieren. Der Start -Handler führt einen Anfrage -Antwortvorgang in der anonymen Rückruffunktion von exec () durch, während der Upload -Handler immer noch einfach auf "Hello World" antwortet, diesmal jedoch das Antwortobjekt verwendet.
Wenn Sie nachweisen möchten, dass der zeitaufwändige Betrieb im /Start-Handler die sofortige Antwort auf die /Upload-Anforderung nicht blockiert, können Sie RequestHandlers.js in das folgende Formular ändern:
Die Codekopie lautet wie folgt:
var exec = required ("chirt_process"). exec;
Funktion start (Antwort) {
console.log ("Anfragenhandler" Start "wurde genannt.");
exec ("find /",
{Timeout: 10000, MaxBuffer: 20000*1024},
Funktion (Fehler, StDout, Stderr) {
response.writeHead (200, {"Content-Type": "Text/Plain"});
response.write (stdout);
Antwort.end ();
}
);
}
Funktion hochladen (Antwort) {
console.log ("Anfrage -Handler" Upload "wurde genannt.");
response.writeHead (200, {"Content-Type": "Text/Plain"});
Antwort.Write ("Hallo Upload");
Antwort.end ();
}
exports.Start = start;
exports.Upload = Upload;
Auf diese Weise dauert es 10 Sekunden lang, wenn Sie http: // localhost: 8888/start beantragen, und bei der Anforderung von http: // localhost: 8888/Upload wird sie sofort reagiert, auch wenn die/start -Antwort zu diesem Zeitpunkt noch verarbeitet wird.