So erhalten Sie Daten aus einem Formular in Express (node.js) übergeben.
-
25-10-2019 - |
Frage
Ich möchte Daten erhalten, die von einer Seite mit einem Formular übergeben werden und diese Daten auf der umgeleiteten Seite verwenden.
Ich habe diese Form in meiner Kundenseite.
<form action="game" method="get">
<input type="text" name="name"/>
<input type="submit" />
</form>
Und ich habe dieses Skript auf meinem Server.
app.get('/game',function(req,res){
res.sendfile(__dirname + '/game.html');
});
PLSS helfen.
Lösung
Verwenden bodyParser.urlencoded(
) Middleware:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
Dann werden die Formularwerte auf Req.body sein:
app.post('/game', function (req, res) {
res.render('the_template', { name: req.body.name });
});
Einstellung { extended: true }
Ermöglicht dem Bodyparser, JSON -ähnliche Daten in den Formulardaten einschließlich verschachtelter Objekte zu akzeptieren. z.B { person: { name: Adam } }
gesendet mit JavaScript und nicht mit den Namenswertpaaren, die herkömmliches HTML -Formular senden. Wenn Sie nicht benötigen, können Sie den erweiterten Wert auf False einstellen. Es ist anscheinend veraltet, keine erweiterte Option zu definieren (dh unter Verwendung einer Standardeinstellung) und sie möchten, dass Sie entscheiden, ob Sie verschachtelte Optionen oder einfache Namenswertpaare benötigen.
Wenn Sie in der Lage sein möchten, Formdaten für einige Routen und JSON -Daten für andere in Ihrem Express -Server analysieren zu können, können Sie verwenden:
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))
urlencoded()
Für X-WWW-Form-Urscoded-Inhaltstyp
true
- Für verschachtelte Datenstrukturenfalse
- für Namenswertpaare
json()
- Für Anwendungs-/JSON -Inhaltstyp
Beachten Sie, dass Form/Multipart einen anderen Körperparser benötigt (z. B. Multer)
Andere Tipps
Damit Express die Form von Formulardaten schön behandeln kann, müssen Sie sicherstellen, dass Sie es haben bodyParser
Eingeschlossen wie SO:
var express = require('express'),
app = express.createServer();
app.use(express.bodyParser());
//the rest of your configuration
Dann können Sie in Ihrem Post -Handler über die auf den Körperkörper zugreifen Request.body
Eigenschaft wie so:
app.post('/game', function (req, res) {
res.render('some-file', { name: req.body.name });
});
Außerdem müssen Sie einen Vorlagenmotor verwenden (wie z. Jade) Wenn Sie beabsichtigen, die Formdaten in der Antwort auszugeben.
Veraltet, die Akzeptierte Antwort ist die richtige Lösung
Wenn Sie in Ihren Ansichten auf Variablennamen zugreifen müssen, sollten Sie die verwenden res.render
Funktion und übergeben die Variable wie:
res.render('game', {
name: req.body.name
}
Und dann in Jade tun
div!= name