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ée à l'aide de postman en chrome):
Post demande
POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"
jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C
code 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 essaie d'obtenir le req.body.userName
, toutefois, req.body
est toujours vide. J'ai vu d'autres cas sur SO décrivant un tel comportement mais aucune des réponses associées ne s'appliquait ici.
Merci d'avoir aidé.
En général, une application express doit spécifier le middleware de l'analyseur de corps approprié pour que req.body
Contienne le corps.
[ÉDITÉ]
Si vous avez besoin d'analyser les données de formulaire encodées en url (non multiparties), ainsi que JSON, essayez d'ajouter:
// 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 devrez ajouter body-parser à la propriété dependencies
de votre package.json
, Puis effectuer un npm update
.
Pour gérer les données de formulaire en plusieurs parties, l'analyseur de corps bodyParser.urlencoded()
ne fonctionnera pas. Voir modules suggérés ici pour analyser les corps en plusieurs parties.
Pour gérer les requêtes multipart/form-data qui prennent en charge le téléchargement de fichiers, 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 }));