web-dev-qa-db-fra.com

comment obtenir des données transmises à partir d'un formulaire dans Express (Node.js)

J'aimerais obtenir les données d'une page à l'aide d'un formulaire et les utiliser dans la page redirigée.

J'ai ce formulaire chez mon client.

    <form action="game" method="get">
                    <input type="text" name="name"/>
                    <input type="submit" />
    </form>

et j'ai ce script sur mon serveur.

app.get('/game',function(req,res){
res.sendfile(__dirname + '/game.html'); 
});

aide plss.

46
Jude Calimbas

Utilisez le middleware bodyParser.urlencoded():

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));

Ensuite, les valeurs de formulaire seront sur req.body:

app.post('/game', function (req, res) {
    res.render('the_template', { name: req.body.name });
});

La définition de { extended: true } Permet à bodyParser d’accepter des données de type json dans les données de formulaire, y compris les objets imbriqués. par exemple. { person: { name: Adam } } Envoyé à l'aide de javascript plutôt que des paires nom-valeur envoyées par le formulaire HTML traditionnel. Si vous n'en avez pas besoin, vous pouvez définir la valeur étendue sur false. Ne pas définir une option étendue (c'est-à-dire utiliser un paramètre par défaut) est apparemment obsolète et semble vouloir que vous décidiez si vous avez besoin d'options imbriquées ou de paires nom/valeur.

Si vous souhaitez pouvoir analyser les données de formulaire de certains itinéraires et les données JSON d'autres sur votre serveur express, vous pouvez utiliser:

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))

urlencoded() pour le type de contenu x-www-form-urlencoded

  • true - pour les structures de données imbriquées
  • false - pour les paires nom-valeur

json() - pour le type de contenu application/json

Notez que formulaire/multipart nécessite un analyseur de corps différent (tel que multer)

47
Alexander

Pour permettre à express de gérer correctement les données de formulaire, vous devez vous assurer que vous avez bodyParser inclus comme suit:

var express = require('express'),
    app = express.createServer();

app.use(express.bodyParser());
//the rest of your configuration

Ensuite, dans votre POST gestionnaire, vous pouvez accéder au corps du formulaire par le biais du Request.body bien comme ça:

app.post('/game', function (req, res) {
    res.render('some-file', { name: req.body.name });
});

Vous devrez également utiliser un moteur de création de modèles (tel que Jade ) si vous souhaitez générer les données de formulaire dans la réponse.

Obsolète, le réponse acceptée est la bonne solution

34
Aaron Powell

Si vous devez accéder aux noms de variable dans vos vues, vous devez utiliser la fonction res.render et transmettre la variable comme suit.

res.render('game', {
    name: req.body.name
}

puis en jade faire

div!= name
1
Amit