Node.js (with express & bodyParser): impossible d’obtenir les données de formulaire à partir de la demande de publication

Je n’arrive pas à récupérer les données de formulaire d’une demande de publication envoyée à mon serveur Node.js. J’ai mis ci-dessous le code du serveur et la demande de publication (envoyé avec postman en chrome):

Poster une demande

POST /api/login HTTP/1.1 Host: localhost:8080 Cache-Control: no-cache ----WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition: form-data; name="userName" jem ----WebKitFormBoundaryE19zNvXGzXaLvS5C 

Code du serveur NodeJS

 var express = require('express'); // call express var app = express(); // define our app using express var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(bodyParser()); app.all('/*', function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Content-Type,accept,access_token,X-Requested-With'); next(); }); var port = process.env.PORT || 8080; // set our port var router = express.Router(); // get an instance of the express Router router.get('/', function(req, res) { res.json({ message: 'I am groot!' }); }); // Login router.route('/login') .post(function(req, res){ console.log('Auth request recieved'); // Get the user name var user = req.body.userName; var aToken = getToken(user); res.json({ 'token':'a_token' }); }); app.use('/api', router); app.listen(port); 

La méthode de connexion tente d’obtenir le nom req.body.userName , cependant, req.body est toujours vide. J’ai vu d’autres cas sur SO décrivant un tel comportement, mais aucune des réponses connexes ne s’appliquait ici.

Merci d’avoir aidé.

En général, une application express doit spécifier le middleware d’parsing de corps approprié pour que req.body puisse contenir le corps.

[ÉDITÉ]

  1. Si vous avez besoin d’parsingr des données de formulaire codées en url (non multipart), ainsi que JSON, essayez d’append:

     // Put this statement near the top of your module var bodyParser = require('body-parser'); // Put these statements before you define any routes. app.use(bodyParser.urlencoded()); app.use(bodyParser.json()); 

    Tout d’abord, vous devez append un parsingur de corps à la propriété dependencies de votre package.json , puis effectuer une npm update .

  2. Pour gérer les données de formulaire en plusieurs parties, l’parsingur body bodyParser.urlencoded() ne fonctionnera pas. Voir les modules suggérés ici pour parsingr les corps multi-parties.

Pour traiter les demandes multipart / form-data prenant en charge le téléchargement de fichier, vous devez utiliser le module multer. lien npm pour le middleware multer

Assurez-vous de mettre dans cet ordre: bodyParser.json () en premier. app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));