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.

War es hilfreich?

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 Datenstrukturen
  • false - 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top