2011-09-22 5 views
25

J'utilise express et de la difficulté à obtenir des données de formulaire de bodyParser. Peu importe ce que je fais, il apparaît toujours comme un objet vide. Voici mon express généré app.js code (la seule chose que j'ai ajouté était la route app.post en bas):Node.js/Formulaire Express post req.body ne fonctionne pas

var express = require('express'); 

var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// Routes 

app.get('/', function(req, res){ 
    res.sendfile('./public/index.html'); 
}); 

app.post('/', function(req, res){ 
    console.log(req.body); 
    res.sendfile('./public/index.html'); 
}); 

app.listen(3010); 

Voici mon formulaire HTML:

<!doctype html> 
<html> 
    <body> 
<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded"> 
    <input type="text" id="mytext" /> 
    <input type="submit" id="mysubmit" /> 
</form> 
    </body> 
</html> 

Quand je soumets la forme, req.body est un objet vide {}

est utile de noter que cela se produit même si je supprime l'attribut enctype de la balise form

... y at-il quelque chose que je manque/faire le mal?

J'utilise noeud v0.4.11 et express v2.4.6

Répondre

33

Le corps d'un message HTTP est un hachage de clé/valeur de toutes les commandes de formulaire avec un attribut name, et la valeur est la valeur du contrôle.

Vous devez donner des noms à toutes vos entrées.

+0

Merci beaucoup! Je ne sais pas comment j'ai négligé cela ... – binarymax

4

Cela est également dû au type de contenu. veuillez voir l'objet console.log (req).

'content-type': 'application/json; charset=UTF-8’ // valid. 

'content-type': 'application/JSON; charset=UTF-8’ // invalid & req.body would empty object {}. 

Pour vérifier le type de contenu par console.log (de req.is ('JSON')) // return true/false

je pense 'charset = UTF-8' est négligeable ci-dessus.