Express js-body-parser nicht funktioniert?
Habe ich Folgendes in mein-node-server mit express (gekürzt auf die wichtigsten Teile):
var app = express.createServer();
app.all(/test/,function(req,res){
console.log(req.headers);
console.log(req.body);
res.send("");
});
function appStart(cobrands){
app.configure(function(){
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use('/min',express.static('../min'));
app.use('/js',express.static('../js'));
app.use('/css',express.static('../css'));
app.use('/img',express.static('../img'));
});
app.listen(8080);
}
Dann habe ich ein einfaches Formular, das ruft aus auf localhost:8080 etwa so:
<form action="http://localhost:8080/test" method="post">
<input type="hidden" name="test" value="testing"/>
<input type="submit" name="submit" value="to node"/>
</form>
Aber express.bodyParser nicht zu sein scheinen etwas zu tun, und erf.Körper ist nicht definiert. Hier ist die Ausgabe des console.log
s:
//req.headers
{ host: 'localhost:8080',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3',
'content-length': '27',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
origin: 'file://',
'content-type': 'application/x-www-form-urlencoded',
'accept-language': 'en-us',
'accept-encoding': 'gzip, deflate',
cookie: '',
connection: 'keep-alive' }
//req.body
undefined
Hinweis: content-type
ist richtig definiert als application/x-www-form-urlencoded
wie es sein sollte für bodyParser zu arbeiten, und ich habe festgestellt, dass es kommt, indem Sie knallen öffnen Sie die debug-tools von Safari und überprüfen Sie, dass die Formular-Daten vorhanden sind.
Blick auf dein code-snippet, das Sie nur benutzt hatte app.post('/search', ...) anstelle der app.get('/search', ...)
InformationsquelleAutor Jesse | 2011-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://expressjs.com/guide.html#configuration
Was passiert ist, die Sie aufrufen app.alle() vor Zugabe einer der anderen middleware. Dies zu tun effektiv stellt app.router vor allen anderen middleware, wodurch Sie nie auf Anfragen, die Ende innen Ihre Routen.
Montage die Anwendung der Routen ist so ziemlich dasselbe wie
app.use(app.router);
.Am Ende Ihren stack sieht dieses:
tl;dr Bewegen Sie Ihren Weg zwischen Ihren Anruf, app.configure() und app.listen().
Vitaly, können Sie ein snippet, wie du tust die Anfrage? req.Körper kann undefiniert sein, wenn der Content-Type-header ist nicht "application/json "oder" application/x-www-form-urlencoded'.
Nie Verstand. Ich habe mich für PHP mit CodeIgniter statt und wechseln Sie zu Node.js nur, wenn die Notwendigkeit entsteht.
"Was passiert ist, die Sie aufrufen app.alle() vor Zugabe einer der anderen middleware" - das war genau mein problem. Danke!
Das ist unglaublich hilfreich, danke!
InformationsquelleAutor Ryan Olds
Ich hatte ähnliches problem und habe herausgefunden, dass dies ist, weil defekte/fehlende express.bodyParser().
Stattdessen express bodyParser ich verwendet habe, verbinden die bodyParser und es funktionierte wie ein Charme:
Nicht arbeiten mich. 'req.Körper " ist noch nicht definiert. Könnten Sie sagen, welche Versionen von Knoten, verbinden und express verwendest du? Danke.
sorry, habe nicht diese evirement schon. Es war experimentell.
InformationsquelleAutor Szymon Wygnański