2012-07-26 20 views
7

मैं कर रहा हूँ नोड/एक्सप्रेस के लिए नए .. मैं पैरामीटर प्राप्त देखना इतना तरह कब्जा कर लिया प्राप्त कर सकते हैं सकता है:NodeJS, एक्सप्रेस पोस्ट पैरामीटर

app.get('/log/:name', api.logfunc); 

पोस्ट तो जैसे: में

app.post('/log', ... (प्रपत्र चर उपलब्ध req.body।)

मुझे app.all के बारे में पता है, लेकिन क्या एक तरीका है कि मैं app.all का उपयोग करते समय जीईटी और पोस्ट के लिए सभी चर प्राप्त कर सकता हूं? (मैं भी php में $ _REQUEST करने के लिए इस्तेमाल कर रहा हूँ :)

THX,

+0

'JSON.stringify (req.query)' 'get' और' JSON.stringify (req.body) '' post' के लिए यह सोचते हैं आप 'app.use (व्यक्त करने के लिए। bodyParser()) ' –

उत्तर

17

आप पैरामीटर-पासिंग की तीन अलग अलग तरीकों के साथ काम कर रहे:

1) पथ मापदंडों के जो व्यक्त रूटर कैप्चर req.param में जब आप अपने मार्ग में कोलन-प्रीफिक्स्ड घटकों या रेगेक्स कैप्चर का उपयोग करते हैं। ये दोनों जीईटी और POST अनुरोधों में उपस्थित हो सकते हैं।

2) यूआरएल क्वेरी-स्ट्रिंग पैरामीटर, जो req.query में कैप्चर किए जाएंगे यदि आप express.query मिडलवेयर का उपयोग करते हैं। ये जीईटी और पीओएसटी दोनों अनुरोधों में भी उपस्थित हो सकते हैं।

3) यदि आप express.bodyParser मिडलवेयर का उपयोग करते हैं तो req.body में बॉडी पैरामीटर कैप्चर किए जाएंगे। ये केवल POST अनुरोधों में मौजूद होंगे जिनके पास "x-www-form-urlencoded" का Content-Type है।

तो आपको क्या करना है, सभी तीन वस्तुओं (यदि वे मौजूद हैं) को एक में विलय करना है। ऐसा करने के लिए कोई मूल Object विधियां नहीं हैं, लेकिन बहुत सारे लोकप्रिय कामकाज हैं। उदाहरण के लिए, underscore.js पुस्तकालय एक extend समारोह है, जो आप

req.params=_.extend(req.params || {}, req.query || {}, req.body || {}). 

लिखने के लिए आप किसी लाइब्रेरी का उपयोग करें और वस्तुओं का विस्तार की अपनी तरह से रोल करना चाहते हैं, this blog post पर एक नज़र लेने के लिए नहीं करना चाहते हैं अनुमति होगी परिभाषित करता है ।

+3

मुझे विश्वास है 'req।param() 'ठीक है - http://expressjs.com/api.html#req.param –

0

Personnaly, मैं विलय req.params, req.body, req.queryObject.assign()

ES6 में के साथ एक एकल ऑब्जेक्ट req.props में:

तुम सिर्फ अपने मार्ग में यह लिखने के लिए की जरूरत है:

app.all('/myroute/:myparam', (req, res, next) => { 
     // merge all req data in one 
     req.props = Object.assign(req.query, req.params, req.body); 
     // optional : 
     // delete req.query; 
     // delete req.params; 
     // delete req.body; 
    }); 

ES5 में:

app.all('/myroute/:myparam', function(req, res, next){ 
     // merge all req data in one 
     req.props = {}; 
     if(req.query) for (var attrname in req.query) { req.props[attrname] = req.query[attrname]; } 
     if(req.params) for (var attrname in req.params) { req.props[attrname] = req.params[attrname]; } 
     if(req.body) for (var attrname in req.body) { req.props[attrname] = req.body[attrname]; } 
     // optional : 
     // delete req.query; 
     // delete req.params; 
     // delete req.body; 
    }); 

अब, आप अपने मिलता है, पोस्ट करने के लिए आसानी से उपयोग कर सकते हैं, अपने सभी मार्गों में req.props साथ पैरामीटर डाल, समानता नाम के बारे में सावधान रहना होगा यदि आप पुराने अनुरोध को हटाने का निर्णय।

इसके अलावा, आप इसे और अधिक उपयोगी बनाने के लिए एक मिडलवेयर/फ़ंक्शंस कर सकते हैं।

अधिक Object.assign() के बारे में: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/assign

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