2014-12-15 13 views
6

nodejs'nin yeni başlıcısıyım, req.body'yi bir middleware kaprisini kullanarak veya hiçbir şey kullanmadan tanımaya çalışıyorum, fakat her ikisi de req.body undefined. İşte benim kodNodejs - Req.body tanımsız olarak post içinde 4.9.0

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; 

Ve ben bunu test etmek için komut curl -X POST -d 'test case' http://127.0.0.1:3000/module kullanın.

Express'in sürümü: 4.9.0
düğümün versiyon:

yardım edin v0.10.33, teşekkür ederim.

+1

I bodyParser bir json ve 'Test case' değildir extects düşünüyorum:/ – naoxink

+2

hareket app.use (bodyParser.json()); (ve ara malzemenin geri kalanı)/post işleyicisinden –

+0

curl -X POST -d '{"name": "tyrion"}' http://127.0.0.1:3000/module, ama yine de tanımlanmamış. – Tyrion

cevap

5

dosyası içermeyen formu gönderimleri için Content-Type: application/x-www-form-urlencoded kullanır.

Üretilen kodlar için verilerinizin doğru biçimde olması gerekir: curl -X POST -d 'foo=bar&baz=bla' http://127.0.0.1:3000/module veya curl -X POST -d 'foo=bar' -d 'baz=bla' http://127.0.0.1:3000/module.

JSON için, doğru olarak Content-Type: curl -H "Content-Type: application/json" -d '{"foo":"bar","baz":"bla"}' http://127.0.0.1:3000/module doğru ayarlamalısınız. @Brett belirtildiği gibi

Ayrıca, (rota işleyicisi dışında) bir yere rotayı POST önce katman app.use() gerekir.

+0

Çok teşekkür ederim, dediğin gibi denedim, sorun yok. – Tyrion

5

Ekspres yapılandırmasını body-parser yanlış konuma yerleştiriyorsunuz. Varsayılan cURL ile

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; 
+0

Yardımlarınız için teşekkür ederim, bana söylediğin gibi denedim ama terminatöre yazdı, nedenini bilmiyorum. – Tyrion

+1

Yardımlarınız için teşekkür ederiz, kod hatası buldum app.use (multer()). – Tyrion

1

Yolları tanımlamadan önce tüm hızlı yapılandırmaları tanımladığınızdan emin olmalısınız. vücut ayrıştırıcı olarak requst'ın vücudunu ayrıştırmaktan sorumludur.

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); 
}); 
+0

Express 4.9 – mako

+0

numaralı telefondan app.configure yok, sadece onu kaldırın ve iç kodunu devre dışı bırakın – msoliman

İlgili konular