2012-09-14 13 views
26

मैं node.js के लिए नया हूं और व्यक्त करता हूं और थोड़ी देर के लिए उनके साथ प्रयोग कर रहा हूं। अब मैं अनुरोध निकाय को पार्स करने से संबंधित एक्सप्रेस ढांचे के डिजाइन से उलझन में हूं। एक्सप्रेस की आधिकारिक गाइड से:Node.js शरीर का सही उपयोग व्यक्त करें पार्सर मिडलवेयर

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(logErrors); 
app.use(clientErrorHandler); 
app.use(errorHandler); 

सभी मिडलवेयर स्थापित करने के बाद, तो हम मार्ग है कि हम हैंडल करना चाहते जोड़ें:

app.post('/test', function(req, res){ 
    //do something with req.body  
}); 

इस दृष्टिकोण के साथ समस्या यह है कि सभी अनुरोध शरीर मार्ग वैधता की जांच करने से पहले पहले पार्स किया जाएगा। अमान्य अनुरोधों के शरीर को पार्स करने में यह बहुत अक्षम है। और भी अधिक है, हम अपलोड का संसाधन सक्षम करता है, तो:

app.use(express.bodyParser({uploadDir: '/temp_dir'})); 

किसी भी ग्राहक किसी भी फाइल को अपलोड करके सर्वर बौछार कर सकते हैं (किसी भी मार्ग/पथ के लिए अनुरोध भेज कर !!), जो सभी कार्रवाई की जाएगी और में रखा '/ temp_dir'। मुझे विश्वास नहीं है कि इस डिफ़ॉल्ट विधि को व्यापक रूप से प्रचारित किया जा रहा है!

हम निश्चित रूप bodyParser समारोह जब मार्ग को परिभाषित करने का उपयोग कर सकते हैं:

app.post('/test1', bodyParser, routeHandler1); 
app.post('/test2', bodyParser, routeHandler2); 

या यहाँ तक कि शायद प्रत्येक समारोह है कि मार्ग को संभालने में शरीर को पार्स। हालांकि, यह करने के लिए कठिन है।

क्या सभी वैध (परिभाषित) मार्गों के लिए express.bodyParser का उपयोग करने का कोई बेहतर तरीका है, और केवल कोडों की पुनरावृत्ति के बिना, चयनित मार्गों पर फ़ाइल अपलोड हैंडलिंग क्षमता का उपयोग करने के लिए कोई बेहतर तरीका है?

उत्तर

30

आपकी दूसरी विधि ठीक है। याद रखें कि आप app.post, app.get और दोस्तों को मिडलवेयर कार्यों के सरणी भी पास कर सकते हैं। तो आप अपनी चीजों के साथ uploadMiddleware नामक एक सरणी को परिभाषित कर सकते हैं जो POST निकायों, अपलोड आदि को संभालता है और इसका उपयोग करता है।

app.post('/test1', uploadMiddleware, routeHandler1); 

उदाहरण शुरुआती के लिए हैं। शुरुआती कोड आपको दिन 1 पर काम करने वाली हानिकारक चीज़ और कुशल और सुरक्षित उत्पादन कोड अक्सर बहुत अलग होता है। आप अनियंत्रित पथ पर अपलोड स्वीकार नहीं करने के बारे में निश्चित रूप से मान्य बिंदु बनाते हैं। सभी अनुरोध निकायों को 'बहुत अक्षम' होने का विश्लेषण करने के लिए, यह आपके आवेदन पर भेजे गए वैध अनुरोधों के लिए अवैध/हमले POST अनुरोधों के अनुपात पर निर्भर करता है। हमले जांच अनुरोधों की औसत पृष्ठभूमि विकिरण शायद तब तक चिंता करने के लिए पर्याप्त नहीं है जब तक कि आपकी साइट लोकप्रिय न हो जाए।

Also here's a blog post with further details of the security considerations of bodyParser.

+1

वाह, एक साल पहले से अपने जवाब की समीक्षा हाल के घटनाक्रमों को शामिल करने के लिए वोट दें पुन: 'bodyParser' –

+0

" शुरुआती कोड आप दिन 1 और उत्पादन कोड कुशल है उस पर काम कर लानत बात प्राप्त करने में मदद करने के लिए और सुरक्षित अक्सर बहुत अलग होते हैं। " तथास्तु। –

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