908 Stimmen

Wie man auf POST-Formularfelder in Express zugreift

Hier ist mein einfaches Formular:

<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 versucht sReq.query.email o sReq.query['email'] o sReq.params['email'] , usw. Keiner von ihnen funktioniert. Sie kommen alle zurück undefined .

Wenn ich zu einem Get-Aufruf wechsle, funktioniert es, also irgendeine Idee?

9voto

cwingrav Punkte 911

Ich habe genau nach diesem Problem gesucht. Ich habe alle oben genannten Ratschläge befolgt, aber req.body gab immer noch ein leeres Objekt {} zurück. In meinem Fall war es etwas so einfach wie die html falsch ist.

Stellen Sie sicher, dass Sie in der html-Datei Ihres Formulars die 'name' Attribut in Ihren Eingabe-Tags, nicht nur 'id' . Andernfalls wird nichts geparst.

<input id='foo' type='text' value='1'/>             // req = {}
<input id='foo' type='text' name='foo' value='1' /> // req = {foo:1}

Mein idiotischer Fehler ist Ihr Vorteil.

8voto

HenioJR Punkte 574

Sie sollten nicht verwenden app.use(express.bodyParser()) . BodyParser ist eine Vereinigung von json + urlencoded + mulitpart. Sie sollten dies nicht verwenden, da multipart in connect 3.0 entfernt wird.

Um dieses Problem zu lösen, können Sie Folgendes tun:

app.use(express.json());
app.use(express.urlencoded());

Es ist sehr wichtig zu wissen, dass app.use(app.router) sollte nach json und urlencoded verwendet werden, sonst funktioniert es nicht!

8voto

Lalit Umbarkar Punkte 423

Für Express 4.1 und höher

Die meisten Antworten beziehen sich auf Express, bodyParser, connect; wobei multipart 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

$ npm install multer

Laden Sie es in Ihre App:

var multer = require('multer');

Fügen Sie sie dann zusammen mit der anderen Formularparsing-Middleware in den Middleware-Stapel ein.

app.use(express.json());
app.use(express.urlencoded());
app.use(multer({ dest: './uploads/' }));

connect.json() behandelt application/json

connect.urlencoded() behandelt application/x-www-form-urlencoded

multer() behandelt multipart/form-data

8voto

antelove Punkte 2552

Express v4.17.0

app.use(express.urlencoded( {extended: true} ))

app.post('/userlogin', (req, res) => {    

   console.log(req.body) // object

   var email = req.body.email;

}

express.urlencoded

Demo-Formular

Eine weitere Antwort zum Thema

6voto

Logan Punkte 10099

Geschrieben bei Express Version 4.16

Innerhalb der Routerfunktion können Sie req.body Eigenschaft, um auf die Variable post zuzugreifen. Wenn dies zum Beispiel die Eigenschaft POST Route Ihres Formulars, würde es zurücksenden, was Sie eingegeben haben:

function(req,res){
      res.send(req.body);

      //req.body.email would correspond with the HTML <input name="email"/>
}

P.S. für diejenigen, die mit PHP vertraut sind: Für den Zugriff auf PHPs $_GET Variable verwenden wir req.query und für den Zugriff auf PHPs $_POST Variable verwenden wir req.body in Node.js.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X