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
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:
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:
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:
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:
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