6
votes

NODEJS - Req.Body indéfini en poste avec Express 4.9.0

Je suis un débutant de Nodejs, j'essaie de connaître Req.body à l'aide d'un corps de middleware ou d'utilisation de rien, mais tous les deux ont trouvé req.body est indéfini. Voici mon code

var app = require('express')();         
var bodyParser = require('body-parser');
var multer = require('multer');         

app.get('/', function(req, res) {       
    res.send("Hello world!\n");         
});                                     

app.post('/module', function(req, res) {
    console.log(req);                   
    app.use(bodyParser.json());         
    app.use(bodyParser.urlencoded({     
        extended: true                  
    }));                                
    app.use(multer);                    
    console.log(req.body);              
});                                     

app.listen(3000);                       

module.exports = app;  


3 commentaires

Je pense que Bodyparser extecte un étui de test JSON et n'est pas le cas: /


Déplacer l'application.use (bodyparser.json ()); (et le reste du middleware) du manuel / poste


J'ai essayé Curl -X Post -D '{"Nom": "Tyrion"}' 127.0.0.1:3000/Module , mais toujours indéfini.


3 Réponses :


5
votes

Vous placez la configuration express pour Body-Parser code> au mauvais emplacement.

var app = require('express')();         
var bodyParser = require('body-parser');
var multer = require('multer');         

// these statements config express to use these modules, and only need to be run once
app.use(bodyParser.json());         
app.use(bodyParser.urlencoded({ extended: true }));                                
app.use(multer);

// set up your routes
app.get('/', function(req, res) {       
    res.send("Hello world!\n");         
});                                     

app.post('/module', function(req, res) {
    console.log(req);                                       
    console.log(req.body);              
});                                     

app.listen(3000);                       

module.exports = app;  


2 commentaires

Merci de votre aide, j'ai essayé comme vous m'avez dit, mais rien d'imprimer à la terminaison, je ne sais pas pourquoi.


Merci pour votre aide, j'ai trouvé une erreur de code, app.use (Multer ()).



5
votes

Par défaut CURL utilise Type de contenu: Application / X-www-Form-Urlencoded pour les soumissions de formulaire qui ne contiennent pas de fichiers.

Pour les formulaires d'urlencode, vos données doivent être au format droit: Curl -X Post -D 'FOO = BAR & BAZ = BLA' http://127.0.0.1:3000/Module ou ou CURL -X Post -D 'FOO = BAR' -D 'BAZ = BLA' http://127.0.0.1:3000/Module . .

Pour JSON, vous devez définir explicitement le droit type de contenu : curl -h "type de contenu: application / json" -d '{"foo": " bar "," baz ":" bla "} 'http://127.0.0.1:3000/module .

Également comme @Brett noté, vous devez APP.Utilise () Votre middleware Avant que post route quelque part (en dehors d'un gestionnaire d'itinéraire).


0 commentaires

2
votes

Vous devez vous assurer de définir toutes les configurations Express avant de définir des itinéraires. Comme un analyseur corporel est responsable de l'analyse du corps de Requoust.

var express = require('express'),
    app     = express(),
    port    = parseInt(process.env.PORT, 10) || 8080;

//you can remove the app.configure at all in case of it is not supported
//directly call the inner code     
app.configure(function(){
  app.use(bodyParser.urlencoded());
  //in case you are sending json objects 
  app.use(bodyParser.json());
  app.use(app.router);
});

app.listen(port);

app.post("/module", function(req, res) {
  res.send(req.body);
});


1 commentaires

Il n'y a pas d'app.configure dans Express 4.9