Hier ist meine einfache Form:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Hier ist mein Express.js /Node.js Code:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Ich habe es versucht sReq.query.email
oder sReq.query['email']
oder sReq.params['email']
usw. Keiner von ihnen funktioniert. Sie alle kehren zurück undefined
.
Wenn ich zu einem Get-Anruf wechsle, funktioniert das, also ... eine Idee?
javascript
node.js
post
express
Murvinlai
quelle
quelle
bodyParser()
der die Antworten hier verwendet, sollte auch die Antwort von @SeanLynch untenAntworten:
Ab Express 4.16.0 haben sich die Dinge erneut geändert . Sie können sie jetzt
express.json()
undexpress.urlencoded()
genau wie in Express 3.0 verwenden .Dies war ab Express 4.0 bis 4.15 anders :
und dann:
Der Rest ist wie in Express 3.0 :
Zuerst müssen Sie Middleware hinzufügen, um die Post-Daten des Körpers zu analysieren.
Fügen Sie eine oder beide der folgenden Codezeilen hinzu:
Verwenden Sie dann in Ihrem Handler das
req.body
Objekt:Beachten Sie, dass die Verwendung von
express.bodyParser()
nicht empfohlen wird....ist äquivalent zu:
Es bestehen Sicherheitsbedenken. Daher
express.multipart()
ist es besser, die Unterstützung für die spezifischen Codierungstypen, die Sie benötigen, explizit hinzuzufügen. Wenn Sie eine mehrteilige Codierung benötigen (um beispielsweise das Hochladen von Dateien zu unterstützen), sollten Sie diese lesen .quelle
content-type
Header gesetzt haben, zum Beispiel:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
abstrahiert JSON-, URL-codierte und mehrteilige Daten in dasreq.body
Objekt.app.use(require('body-parser').json())
Zeile ausreichend. Und dann können Sie die JSON-Daten aus dem Body-Objekt Ihrer Anfrage lesen, dhreq.body
aus einer Routendefinition.Sicherheitsbedenken bei Verwendung von express.bodyParser ()
Während alle anderen Antworten zur Zeit mit dem empfehlen
express.bodyParser()
Middleware, das ist eigentlich ein Wrapper um dieexpress.json()
,express.urlencoded()
undexpress.multipart()
Middle ( http://expressjs.com/api.html#bodyParser ). Das Parsen von Formularanforderungskörpern erfolgt durch dieexpress.urlencoded()
Middleware und ist alles, was Sie benötigen, um Ihre Formulardaten fürreq.body
Objekte verfügbar zu machen.Aus Sicherheitsgründen, wie
express.multipart()
/connect.multipart()
temporäre Dateien für alle hochgeladenen Dateien erstellt werden (und nicht durch Müll gesammelt werden), wird jetzt empfohlen , denexpress.bodyParser()
Wrapper nicht zu verwenden, sondern nur die von Ihnen benötigten Middlewares.Hinweis:
connect.bodyParser()
Wird in Kürze aktualisiert und enthält nururlencoded
undjson
wenn Connect 3.0 veröffentlicht wird (was Express erweitert).Also kurz gesagt, anstatt ...
...du solltest benutzen
Wenn Sie mehrteilige Formulare (Datei-Uploads) verarbeiten müssen, verwenden Sie eine Bibliothek oder Middleware eines Drittanbieters wie Multiparty, Busboy, Dicer usw.
quelle
multipart()
als Teil von veröffentlicht wurdebodyParser()
,bodyParser()
wird es wieder "sicher". Sie müssen jedoch die mehrteilige Unterstützung mithilfe einer Drittanbieter-Bibliothek explizit aktivieren.Hinweis : Diese Antwort gilt für Express 2. Siehe hier für Express 3.
Wenn Sie Connect / Express verwenden, sollten Sie die bodyParser-Middleware verwenden : Sie wird im Expressjs-Handbuch beschrieben .
Hier ist die ursprüngliche Nur-Verbindung-Version:
Sowohl der Querystring als auch der Body werden mithilfe der Parameterbehandlung (
qs
) im Rails-Stil und nicht mithilfe der Bibliothek auf niedriger Ebenequerystring
analysiert . Um wiederholte Parameter mit zu analysierenqs
, muss der Parameter in Klammern stehen :name[]=val1&name[]=val2
. Es werden auch verschachtelte Karten unterstützt. Zusätzlich zum Parsen von HTML-Formularübermittlungen kann der bodyParser JSON-Anforderungen automatisch analysieren.Bearbeiten : Ich habe auf express.js nachgelesen und meine Antwort geändert, um für Benutzer von Express natürlicher zu sein.
quelle
Dies ist der Fall, wenn Sie die gepostete Abfrage ohne Middleware erstellen möchten:
Das wird dies an den Browser senden
Es ist wahrscheinlich besser, Middleware zu verwenden, damit Sie dies nicht in jeder Route immer wieder schreiben müssen.
quelle
Hinweis für Express 4-Benutzer:
Wenn Sie versuchen,
app.use(express.bodyParser());
in Ihre App zu integrieren, wird beim Versuch, Ihren Express-Server zu starten, die folgende Fehlermeldung angezeigt:Sie müssen das Paket
body-parser
separat von npm installieren und dann Folgendes verwenden (Beispiel von der GitHub-Seite ):quelle
In irgendeiner Form:
Mit Express
Ausgabe:
quelle
Backend:
Vorderes Ende:
quelle
Dann können Sie auf
app.post
Anfrage Post-Werte über erhaltenreq.body.{post request variable}
.quelle
Update für Express 4.4.1
Folgende Middleware wird aus Express entfernt.
Wenn Sie die Middleware direkt wie in Express 3.0 verwenden. Sie erhalten folgende Fehlermeldung:
Um diese Middleware nutzen zu können, müssen Sie jetzt für jede Middleware separat npm ausführen .
Da bodyParser als veraltet markiert ist, empfehle ich die folgende Methode, um json, urlencode und mehrteiligen Parser wie formidable connect-multiparty zu verwenden. (Multipart Middleware ist ebenfalls veraltet).
Denken Sie auch daran, dass beim Definieren von urlencode + json die Formulardaten nicht analysiert werden und req.body undefiniert ist. Sie müssen ein Middleware-Handle für die mehrteilige Anforderung definieren.
quelle
Für Express 4.1 und höher
Da die meisten Antworten Express, bodyParser, connect verwenden; wo mehrteilig veraltet ist. Es gibt eine sichere Möglichkeit, Post-Multipart-Objekte einfach zu senden.
Multer kann als Ersatz für connect.multipart () verwendet werden.
So installieren Sie das Paket
Laden Sie es in Ihre App:
Fügen Sie es dann zusammen mit der anderen Form, die die Middleware analysiert, zum Middleware-Stapel hinzu.
connect.json () behandelt application / json
connect.urlencoded () behandelt application / x-www-form-urlencoded
multer () verarbeitet mehrteilige / Formulardaten
quelle
Ich habe genau nach diesem Problem gesucht. Ich habe alle oben genannten Ratschläge befolgt, aber req.body hat immer noch ein leeres Objekt {} zurückgegeben. In meinem Fall war es genauso einfach wie das falsche HTML.
Stellen Sie im HTML Ihres Formulars sicher, dass Sie das
'name'
Attribut nicht nur in Ihren Eingabe-Tags verwenden'id'
. Ansonsten wird nichts analysiert.Mein idiotischer Fehler ist dein Vorteil.
quelle
Sie sollten app.use (express.bodyParser ()) nicht verwenden . BodyParser ist eine Vereinigung von json + urlencoded + mulitpart. Sie sollten dies nicht verwenden, da Multipart in Connect 3.0 entfernt wird.
Um dies zu beheben, können Sie Folgendes tun:
Es ist sehr wichtig zu wissen, dass app.use (app.router) nach dem json und urlencoded verwendet werden sollte, sonst funktioniert es nicht!
quelle
Anforderungs-Streaming hat bei mir funktioniert
quelle
postdata.split("&")
zu tun wäre, das Kernmodul zu ladenquerystring = require('querystring')
und dann Ihrpostdata
mit zu analysierenquerystring.parse(postdata)
;Ich konnte alle Parameter finden, indem ich den folgenden Code sowohl für POST- als auch für GET- Anforderungen verwendete.
quelle
Geschrieben in Express Version 4.16
Innerhalb der Router-Funktion können Sie mit der
req.body
Eigenschaft auf die Post-Variable zugreifen. Wenn dies beispielsweise diePOST
Route Ihres Formulars wäre, würde es Ihre Eingaben zurücksenden:PS für diejenigen, die mit PHP vertraut sind: Um auf die PHP-
$_GET
Variable zuzugreifen , verwenden wirreq.query
und auf die PHP-$_POST
Variable, die wirreq.body
in Node.js verwenden.quelle
quelle
Post-Parameter können wie folgt abgerufen werden:
quelle
param
wird für GET-Anfragen verwendet. Nicht für POST. In Ihrem Beispiel fehlen Details, was für Neuankömmlinge sehr verwirrend ist. Und obendreinrequest.param
ist es tatsächlich veraltet, sodass Ihr Beispiel auf so vielen Ebenen falsch ist.Sie verwenden
req.query.post
mit falscher Methodereq.query.post
arbeitet mitmethod=get
,method=post
arbeitet mit Body-Parser .Versuchen Sie dies einfach, indem Sie den Beitrag ändern , um Folgendes zu erhalten :
Und im Express-Code verwenden Sie 'app.get'
quelle
Verwenden Sie das Express-Fileupload- Paket:
quelle