Ma page d'inscription d'utilisateur a ce formulaire:

<form action="/users" method="post">
    <input type="text" name="Ainm">
    <input type="text" name="Password">
    <input type="text" name="Email">
    <input type="submit" value="Submit">
</form>

Et le fichier serveur correspondant contient:

bodyParser = require('body-parser');
app.use(bodyParser.json());


//add new user - required fields = username, password, email
app.post('/users', function (req, res) {
    Users.findOne({ Ainm: req.body.Ainm })
      .then(function (user) {
        if (user) {
          return res.status(400).send(req.body.Ainm + " Name already in use.");
        } else {
          Users
            .create({
              Ainm: req.body.Ainm,
              Password:req.body.Password,
              Email: req.body.Email
            })
            .then(function (user) { res.status(201).json(user) })
            .catch(function (error) {
              console.error(error);
              res.status(500).send("Error: " + error);
            })
        }
      }).catch(function (error) {
        console.error(error);
        res.status(500).send("Error: " + error);
      });
  });

Mais quand j'essaye d'entrer des données de test, je vois

Undefined Name already in use.

Pourquoi la valeur d'Ainm pourrait-elle être indéfinie?

Je vous remercie.

-1
Roibeárd Mac Unfraidh 28 sept. 2020 à 14:14

2 réponses

Meilleure réponse
app.use(bodyParser.json());

Voilà votre problème.

Les données du formulaire ne sont pas encodées en JSON. Il utilisera l'encodage application/x-www-form-urlencoded.

Vous devez utiliser bodyParser.urlencoded().

1
Quentin 28 sept. 2020 à 11:52

Il semble que vous n'ayez pas de middleware bodyparser dans votre code (ayant à la fois urlencoded et json pour rendre l'API générique à l'avenir)

Si vous utilisez express ci-dessous 4.16, installez body-parser

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

Sinon la version actuelle (4.16 et plus) d'express est livrée avec un bodyParser intégré

app.use(express.json())
app.use(express.urlencoded({ extended: true })); 
0
r7r 28 sept. 2020 à 11:56