2014-12-15 13 views
6

के साथ पोस्ट में अपरिभाषित मैं नोडजेज़ का शुरुआत कर रहा हूं, मैं एक मिडलवेयर बॉडी-पार्स का उपयोग करके req.body को जानने का प्रयास करता हूं या कुछ भी नहीं उपयोग करता हूं, लेकिन दोनों पाए जाते हैं req.body अनिर्धारित है। यहाँ मेरी कोडनोडजेस - Req.body एक्सप्रेस 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; 

है और मैं आदेश curl -X POST -d 'test case' http://127.0.0.1:3000/module का उपयोग यह परीक्षण करने के लिए।

एक्सप्रेस के संस्करण: 4.9.0
नोड के संस्करण: v0.10.33

कृपया मदद, धन्यवाद।

+1

मैं bodyParser एक json और 'परीक्षण case' नहीं है extects लगता है:/ – naoxink

+2

ले जाएँ app.use (bodyParser.json()); (और शेष मिडलवेयर)/पोस्ट हैंडलर –

+0

से मैंने curl -X POST-d '{"name": "tyrion"}' http://127.0.0.1:3000/module, लेकिन अभी भी अपरिभाषित किया। – Tyrion

उत्तर

5

डिफ़ॉल्ट cURL तक फ़ॉर्म सबमिशन फ़ाइलें शामिल नहीं है के लिए Content-Type: application/x-www-form-urlencoded उपयोग करता है।

urlencoded रूपों के लिए आपके डेटा को सही प्रारूप में होना चाहिए: curl -X POST -d 'foo=bar&baz=bla' http://127.0.0.1:3000/module या curl -X POST -d 'foo=bar' -d 'baz=bla' http://127.0.0.1:3000/module

JSON के लिए, आपको स्पष्ट रूप से सही Content-Type: curl -H "Content-Type: application/json" -d '{"foo":"bar","baz":"bla"}' http://127.0.0.1:3000/module सेट करना होगा।

इसके अलावा @ ब्रेट ने नोट किया है कि आपको app.use() से पहले पोस्ट करें जो कहीं भी रूट मार्ग (मार्ग हैंडलर के बाहर) की आवश्यकता है।

+0

बहुत बहुत धन्यवाद, मैंने कोशिश की जैसे मैंने कहा, ठीक है। – Tyrion

5

आप गलत स्थान पर body-parser के लिए एक्सप्रेस कॉन्फ़िगरेशन डाल रहे हैं।

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

आपकी मदद के लिए धन्यवाद, मैंने कोशिश की जैसा आपने मुझे बताया था, लेकिन टर्मिनेटर को प्रिंट करना, मुझे नहीं पता कि क्यों। – Tyrion

+1

आपकी मदद के लिए धन्यवाद, मुझे कोड त्रुटि मिली, app.use (multer())। – Tyrion

1

आपको यह सुनिश्चित करना होगा कि आप मार्गों को परिभाषित करने से पहले सभी एक्सप्रेस कॉन्फ़िगरेशन को परिभाषित करें। क्योंकि बॉडी-पार्सर अपेक्षित शरीर को पार्स करने के लिए ज़िम्मेदार है।

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

एक्सप्रेस 4.9 – mako

+0

में कोई ऐप.कॉन्फिगर नहीं है बस इसे हटा दें और इसके आंतरिक कोड को ऑप्ट आउट करें – msoliman

संबंधित मुद्दे