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?

24voto

David Punkte 629

In einer bestimmten Form:

<form action='/somepath' method='post'>
   <input type='text' name='name'></input>
</form>

Mit Express

app.post('/somepath', function(req, res) {

    console.log(JSON.stringify(req.body));

    console.log('req.body.name', req.body['name']);
});

Ausgabe:

{"name":"x","description":"x"}
req.param.name x

21voto

lakesare Punkte 10044

Backend:

import express from 'express';
import bodyParser from 'body-parser';

const app = express();
app.use(bodyParser.json()); // add a middleware (so that express can parse request.body's json)

app.post('/api/courses', (request, response) => {
  response.json(request.body);
});

Vorderseite:

fetch("/api/courses", {
  method: 'POST',
  body: JSON.stringify({ hi: 'hello' }), // convert Js object to a string
  headers: new Headers({ "Content-Type": "application/json" }) // add headers
});

16voto

app.use(express.bodyParser());

Dann für app.post Anfrage können Sie die Postwerte über req.body.{post request variable} .

15voto

yeelan Punkte 1361

Aktualisierung für Express 4.4.1

Die folgende Middleware wird aus Express entfernt.

  • bodyParser
  • json
  • urlencoded
  • mehrteilig

Wenn Sie die Middleware direkt verwenden, wie Sie es in express 3.0 getan haben. Sie erhalten den folgenden Fehler:

Error: Most middleware (like urlencoded) is no longer bundled with Express and 
must be installed separately.

Um diese Middleware zu nutzen, müssen Sie nun Folgendes tun npm für jede Middleware separat.

Da bodyParser als veraltet markiert ist, empfehle ich den folgenden Weg mit json, urlencode und multipart Parser wie formidable, connect-multiparty. (Multipart Middleware ist ebenfalls veraltet).

Denken Sie auch daran, dass durch die Definition von urlencode + json die Formulardaten nicht geparst werden und req.body undefiniert ist. Sie müssen eine Middleware definieren, die die mehrteilige Anfrage behandelt.

var urlencode = require('urlencode');
var json = require('json-middleware');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();

app.use(json);
app.use(urlencode);
app.use('/url/that/accepts/form-data', multipartMiddleware);

11voto

Shivam Jha Punkte 2316

更新情報

Ab dem Express version 4.16+ Ihre eigene Body-Parser-Implementierung ist nun im Standard-Express-Paket enthalten, so dass Sie keine weitere Abhängigkeit herunterladen müssen.

Möglicherweise haben Sie eine Zeile in Ihren Code eingefügt, die wie die folgende aussieht:

app.use(bodyparser.json()); //utilizes the body-parser package

Wenn Sie Express 4.16+ verwenden, können Sie diese Zeile jetzt durch ersetzen:

app.use(express.json()); //Used to parse JSON bodies

Dies sollte keine bahnbrechenden Änderungen in Ihre Anwendungen bringen, da der Code in express.json() auf bodyparser.json() basiert.

Wenn Sie auch den folgenden Code in Ihrer Umgebung haben:

app.use(bodyParser.urlencoded({extended: true}));

Sie können das durch ersetzen:

app.use(express.urlencoded()); //Parse URL-encoded bodies

Ein letzter Hinweis zur Vorsicht: Es gibt immer noch einige sehr spezielle Fälle, in denen body-parser vielleicht noch notwendig sein, aber in den meisten Fällen Express Implementierung von body-parser ist alles, was Sie für die meisten Anwendungsfälle benötigen.

(Siehe die Dokumente unter expressjs/bodyparser für weitere Einzelheiten).

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