Heim >Web-Frontend >js-Tutorial >Erstellen Sie ganz einfach einen NodeJS-Server (10): Umgang mit POST-Requests_node.js

Erstellen Sie ganz einfach einen NodeJS-Server (10): Umgang mit POST-Requests_node.js

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

Der von uns erstellte Server hat bisher keinen praktischen Nutzen. Als Nächstes beginnen wir mit der Implementierung einiger tatsächlich nützlicher Funktionen.

Was wir tun wollen, ist: Der Benutzer wählt eine Datei aus, lädt die Datei hoch und sieht dann die hochgeladene Datei im Browser.

Zuerst benötigen wir einen Textbereich, in den Benutzer Inhalte eingeben können, und übermitteln ihn dann über eine POST-Anfrage an den Server.

Wir fügen Code im Startereignishandler hinzu und ändern requestHandlers.js wie folgt:

Code kopieren Der Code lautet wie folgt:

Funktionsstart (Antwort) {
console.log("Der Anforderungshandler 'start' wurde aufgerufen.");
var body = '' '' '' '' '' '
' '' '' '
' '' '';
Response.writeHead(200, {"Content-Type": "text/html"});
Response.write(body);
Response.end();
}
Funktions-Upload (Antwort) {
console.log("Der Anforderungshandler 'upload' wurde aufgerufen.");
Response.writeHead(200, {"Content-Type": "text/plain"});
Response.write("Hallo Upload");
Response.end();
}
exports.start = start;
exports.upload = hochladen;



Sie können den Effekt sehen, indem Sie http://localhost:8888/start in Ihrem Browser aufrufen.

Als nächstes müssen wir den Anforderungshandler /upload implementieren, um die POST-Anfrage auszulösen, wenn der Benutzer das Formular absendet.

Um den gesamten Prozess nicht blockierend zu gestalten, teilt Node.js die POST-Daten in viele kleine Datenblöcke auf und übergibt diese kleinen Datenblöcke dann durch Auslösen bestimmter Ereignisse an die Rückruffunktion. Zu den spezifischen Ereignissen gehören hier das Datenereignis (das anzeigt, dass ein neuer kleiner Datenblock angekommen ist) und das Endereignis (das anzeigt, dass alle Daten empfangen wurden).

Wir tun dies, indem wir einen Listener für das Anforderungsobjekt registrieren. Das Anforderungsobjekt wird hier jedes Mal an die Rückruffunktion onRequest übergeben, wenn eine HTTP-Anfrage empfangen wird.
Wir legen den Code auf dem Server ab 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 postData = ""; var pathname = url.parse(request.url).pathname; console.log("Anfrage für „Pfadname“ erhalten.“);
request.setEncoding("utf8");
request.addListener("data", function(postDataChunk) {
PostData = postDataChunk;
console.log("Received POST data chunk '" postDataChunk "'.");
});
request.addListener("end", function() {
route(Handle, Pfadname, Antwort, PostData);
});
}
http.createServer(onRequest).listen(8888);
console.log("Server wurde gestartet.");
}
exports.start = start;



Der obige Code macht drei Dinge: Zuerst legen wir das Codierungsformat der empfangenen Daten auf UTF-8 fest und registrieren dann einen Listener für das „Daten“-Ereignis, um jeden neuen empfangenen Datenblock zu sammeln und ihn dem zuzuweisen postData-Variable. Schließlich verschieben wir den Request-Routing-Aufruf in den End-Event-Handler, um sicherzustellen, dass er nur dann ausgelöst wird, wenn alle Daten empfangen wurden, und zwar nur einmal. Wir übergeben auch die POST-Daten an den Request-Router, da diese Daten vom Request-Handler verwendet werden.

Als nächstes wird auf der /upload-Seite der vom Benutzer eingegebene Inhalt angezeigt

Ändern wir router.js:

Code kopieren

Der Code lautet wie folgt:


Funktion Route(Handle, Pfadname, Antwort, PostData) {
console.log("Im Begriff, eine Anfrage für "Pfadname) weiterzuleiten);
if (typeof handle[pathname] === 'function') {
handle[Pfadname](Antwort, PostData);
} sonst {
console.log("Kein Anforderungshandler für "Pfadname gefunden);
Response.writeHead(404, {"Content-Type": "text/plain"});
Response.write("404 Nicht gefunden");
Response.end();
}
}
exports.route = route;

Dann fügen wir in requestHandlers.js die Daten in die Antwort auf die Upload-Anfrage ein:

Code kopieren Der Code lautet wie folgt:

Funktion start(response, postData) {
console.log("Der Anforderungshandler 'start' wurde aufgerufen.");
var body = '' '' '' '' '' '
' '' '' '
' '' '';
Response.writeHead(200, {"Content-Type": "text/html"});
Response.write(body);
Response.end();
}
Funktion upload(response, postData) {
console.log("Der Anforderungshandler 'upload' wurde aufgerufen.");
Response.writeHead(200, {"Content-Type": "text/plain"});
Response.write("Sie haben gesendet: " postData);
Response.end();
}
exports.start = start;
exports.upload = hochladen;



Das Letzte, was wir tun müssen, ist: Derzeit übergeben wir den gesamten Nachrichtentext der Anfrage an die Anfrageroute und den Anfragehandler. Wir sollten nur die Teile der POST-Daten, die uns interessieren, an die Anforderungsroute und den Anforderungshandler übergeben. In unserem Beispiel interessiert uns eigentlich nur das Textfeld.

Wir können das zuvor eingeführte Querystring-Modul verwenden:




Code kopieren

Der Code lautet wie folgt:

var querystring = require("querystring");

Funktion start(response, postData) { console.log("Der Anforderungshandler 'start' wurde aufgerufen."); var body = '' '' '' '' '' '
' '' '' '
' '' ''; Response.writeHead(200, {"Content-Type": "text/html"});
Response.write(body);
Response.end();
}
Funktion upload(response, postData) {
console.log("Der Anforderungshandler 'upload' wurde aufgerufen.");
Response.writeHead(200, {"Content-Type": "text/plain"});
Response.write("Sie haben den Text gesendet: " querystring.parse(postData).text);
Response.end();
}
exports.start = start;
exports.upload = hochladen;



Okay, das ist alles über die Verarbeitung von POST-Daten.

Im nächsten Abschnitt werden wir die Funktion zum Hochladen von Bildern implementieren.

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