Wie kann ich problemlos auf Formulardaten in Express js zugreifen?
Lesezeit: 6 Minuten
Dave Pile
Ich habe eine POST-Anfrage mit einer sehr einfachen und kleinen Menge an Formulardaten. Wie kann ich am einfachsten darauf zugreifen?
Viele Tutorials/Beiträge usw. sprechen darüber bodyParser, ist aber nicht mehr im Lieferumfang von Express enthalten. Andere Orte (Blogs usw.) empfehlen die Verwendung urlencoded direkt, aber jetzt ist auch dies nicht verfügbar.
Der Versuch, genaue Informationen zu diesen Frameworks oder Technologien zu finden, geht mir auf die Nerven.
Kann mir bitte jemand den empfohlenen (aktuellen) Weg erklären, wie ich POST-Formulardaten in Express erhalten kann?
Dies sollte nicht abgelehnt werden. Es gibt wirklich keine einfache Dokumentation zum Lesen eines einzelnen POST-Parameters. Die akzeptierte Lösung verwendet ein veraltetes Paket.
– Jeremy
3. September 2014 um 4:23
Jeremy Ich denke, dass die akzeptierte Lösung kein veraltetes Paket ist. Das Paket, auf das sich Mritunjay bezieht, hat einen Bindestrich im Namen und unterscheidet sich meiner Meinung nach von der anfälligen „Bodyparser“-Middleware. Ich denke, es wird in einigen Blogbeiträgen erwähnt, die vor dem ursprünglichen „Bodyparser“ warnen. Aus diesem Grund stimme ich zu, dass es nicht abgelehnt werden sollte (dh es zeigt keinen Forschungsaufwand), da ich lange nach einer Lösung gesucht habe, aber das Problem darin besteht, dass es so viele alte und verwirrende Informationen gibt, die mir den Kopf zerbrechen.
– Dave Pile
4. September 2014 um 1:11
Danke für die Klarstellung; Mir war nicht klar, dass es einen Unterschied zwischen den Paketen body-parser und bodyParser gibt. Diese Subtilität ist einer der Gründe, warum diese Frage richtig ist.
– Jeremy
4. September 2014 um 14:18
Mritunjay
Sie sollten installieren body-parser durch npm-install. Jetzt kommt es als separate Middleware.
Fügen Sie anschließend die folgende Zeile in Ihre app.js ein
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
// in latest body-parser use like below.
app.use(bodyParser.urlencoded({ extended: true }));
Es analysiert die post Anfrage als object. Sie erhalten Ihre Variablen req.body.
In deinem post Anforderungshandler.
app.post('/post',function(request,response){
console.log(request.body) //you will get your data in this as object.
})
Bearbeiten 1
Die obige Antwort bezog sich auf die speziell gestellte Frage, nach der das OP gesucht hatte bodyParser(veraltet), was nicht Teil von war express mehr.
Da der Titel der Frage sehr allgemein gehalten ist und die Antwort nicht alle Aspekte umfasst form-dataich werde die Antwort von @StLia als Bearbeitung einfügen.
Aufgrund ihrer Komplexität und typischerweise großen Beschaffenheit werden hierdurch keine mehrteiligen Körper behandelt. Bei mehrteiligen Körpern könnten Sie an folgenden Modulen interessiert sein:
Hat bei mir auch funktioniert. Akzeptierte Antwort hat nicht funktioniert FormData() mit Dateien.
– DileepNimantha
26. April 2021 um 11:37 Uhr
Habe Express ausprobiert, beeindruckend. Ein Problem wurde festgestellt. Wenn wir den Wert eines Feldes als Zahl übergeben, konvertiert formiddable ihn in einen String.
Aufgrund ihrer Komplexität und typischerweise großen Beschaffenheit werden hierdurch keine mehrteiligen Körper behandelt.
Das Obige wird funktionieren x-www-form-urlencoded Und json aber es wird mit keinem funktionieren multipart. form-data ist auch multipart mit der Kopfzeile multipart/form-data.
Express 4.16+ hat eine eigene Version des Body-Parsers implementiert, sodass Sie die Abhängigkeit nicht zu Ihrem Projekt hinzufügen müssen. Sie können es nativ in Express ausführen
app.use(express.json()); // Used to parse JSON bodies
app.use(express.urlencoded()); // Parse URL-encoded bodies using query-string library
// or
app.use(express.urlencoded({ extended: true })); // Parse URL-encoded bodies using qs library
Siehe auch: query-string vs. qs
Neben den Lösungen mit formidablees gibt ein weiteres Modul, das ich seit 2019 in meinen letzten Projekten verwende. Das Modul Express-Formulardaten kann einfach in Ihrer Serverdatei deklariert werden wie:
Wenn Sie beispielsweise Bilder hochladen, req.files stellt alle relevanten Daten bereit, die Sie für den Umgang mit den Dateien benötigen, wie Pfad, Größe, Dateiname usw.
Alex Dunlop
Mir ist aufgefallen, dass die Antwort von @HubballiHuli darin bestand, ein Paket namens express-formidable zu verwenden. Sie müssen dieses unnötige Paket nicht verwenden, es stellt eine (kleine) Codedatei bereit. Stattdessen können Sie es selbst tun (und jetzt die Abhängigkeit entfernen).
Wenn du gerne möchtest Wenden Sie die formidableMiddleware nur auf eine API-Route und nicht global anso würden Sie den Wert übergeben.
Dies wäre nützlich, wenn Sie verschiedene Header mischen möchten, um sie an die API für andere APIs zu übergeben, für die Sie nicht möchten, dass die formidableMiddleware-API angewendet wird.
const express = require('express');
const formidable = require('express-formidable');
var app = express();
app.post('/mypath', formidableMiddleware(), (req, res) => {
// rest of the code
})
Das hat bei mir funktioniert. In meinem Fall habe ich mit auf die Formulardatenfelder zugegriffen req.fields.
– henrykodev
18. Mai um 0:58
14540700cookie-checkWie kann ich problemlos auf Formulardaten in Express js zugreifen?yes
Dies sollte nicht abgelehnt werden. Es gibt wirklich keine einfache Dokumentation zum Lesen eines einzelnen POST-Parameters. Die akzeptierte Lösung verwendet ein veraltetes Paket.
– Jeremy
3. September 2014 um 4:23
Jeremy Ich denke, dass die akzeptierte Lösung kein veraltetes Paket ist. Das Paket, auf das sich Mritunjay bezieht, hat einen Bindestrich im Namen und unterscheidet sich meiner Meinung nach von der anfälligen „Bodyparser“-Middleware. Ich denke, es wird in einigen Blogbeiträgen erwähnt, die vor dem ursprünglichen „Bodyparser“ warnen. Aus diesem Grund stimme ich zu, dass es nicht abgelehnt werden sollte (dh es zeigt keinen Forschungsaufwand), da ich lange nach einer Lösung gesucht habe, aber das Problem darin besteht, dass es so viele alte und verwirrende Informationen gibt, die mir den Kopf zerbrechen.
– Dave Pile
4. September 2014 um 1:11
Danke für die Klarstellung; Mir war nicht klar, dass es einen Unterschied zwischen den Paketen body-parser und bodyParser gibt. Diese Subtilität ist einer der Gründe, warum diese Frage richtig ist.
– Jeremy
4. September 2014 um 14:18