2011-09-23 11 views
8

में डालें ठीक है तो मेरे पास एक जेएस ऑब्जेक्ट है जिसे AJAX के माध्यम से नोडजेस बैकएंड में पोस्ट किया जा रहा है। मैं इस जेएस ऑब्जेक्ट को सीधे अपने मोंगोज़ डीबी में डालना चाहता हूं क्योंकि ऑब्जेक्ट कुंजियां डीबी स्कीमा के साथ पूरी तरह मेल खाती हैं।मोंगोस: जेएस ऑब्जेक्ट को सीधे डीबी

मैं वर्तमान में है इस (गतिशील नहीं और बहुत जटिल):

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 

    formContents.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 
+2

* "ठीक है तो मैं एक जे एस उद्देश्य यह है कि NodeJS बैकएंड के लिए AJAX के माध्यम से पोस्ट की जा रही है। मैं इस जे एस मेरी नेवला डाटाबेस में सीधे वस्तु के रूप में वस्तु कुंजियां पहले से ही db स्कीमा के साथ पूरी तरह मेल खाते हैं सम्मिलित करना चाहते है "* किसी प्रकार के इंजेक्शन हमले के लिए एक ** उत्कृष्ट ** वेक्टर की तरह लगता है, [एसक्यूएल इंजेक्शन] (http://en.wikipedia.org/wiki/SQL_injection) के समान। इसे भेजने से पहले सर्वर पर अपने डेटा को संसाधित करने और सत्यापित करने के लिए हमेशा बेहतर होता है। ग्राहकों पर भरोसा नहीं किया जा सकता है। –

+2

हाँ मुझे पता है। यह एक परीक्षण मामला है। वह मेरा सवाल नहीं था। – wilsonpage

+0

तो यह एक खराब परीक्षण केस है, क्योंकि आपको हमेशा डेटा सत्यापित करना चाहिए :) मैं वर्तमान में एक समान संदर्भ में काम कर रहा हूं और डेटा –

उत्तर

9

:

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 
     itemModel = db.model('item'), 
     newitem = new itemModel(); 

    newitem.item_ID   = ""; 
    newitem.item_title  = formContents.item_title; 
    newitem.item_abv  = formContents.item_abv; 
    newitem.item_desc  = formContents.item_desc; 
    newitem.item_est  = formContents.item_est; 
    newitem.item_origin  = formContents.item_origin; 
    newitem.item_rating  = formContents.item_rating; 
    newitem.item_dateAdded = Date.now(); 

    newitem.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 

लेकिन इस (सेक्सी और गतिशील) की तरह कुछ करने के लिए इसे नीचे ट्रिम करना चाहते यदि आप इस तरह की प्लगइन का उपयोग मोंगोज़ (http://tomblobaum.tumblr.com/post/10551728245/filter-strict-schema-plugin-for-mongoose-js) के साथ करते हैं तो आप अपने फॉर्म में एक सरणी डाल सकते हैं, जैसे newitem[item_title] और newitem[item_abv] - या item[title] और item[abv]

यदि तत्व वहां से मेल खाते हैं तो आप पूरे req.body को भी पास कर सकते हैं। MongooseStrict प्लगइन आपके स्कीमा में स्पष्ट रूप से सेट नहीं किए गए किसी भी मान को फ़िल्टर करेगा, लेकिन यह अभी भी जांच प्रकार और मैंगोज़ तक सत्यापन छोड़ देता है। आपकी स्कीमा में उचित सत्यापन विधियों के साथ, आप किसी भी इंजेक्शन हमलों से सुरक्षित रहेंगे।

संपादित करें: मान लें कि आपने प्लगइन लागू किया है, तो आप इस कोड का उपयोग करने में सक्षम होना चाहिए।

app.post('/items/submit/new-item', function(req, res){ 
    new itemModel(req.body.formContents).save(function (e) { 
    res.send('item saved'); 
    }); 
}); 
+0

डेटा को सत्यापित करने के लिए सफलतापूर्वक validate.js का परीक्षण किया है, धन्यवाद, जिस विधि को आपने वर्णित विधि प्लगइन की आवश्यकता के बिना काम किया है। सुरक्षा सुनिश्चित करने के लिए मुझे निश्चित रूप से इसे आगे बढ़ाने की आवश्यकता होगी। स्कीमा में क्या बात है अगर उन्हें इस तरह से ओवरराइड किया जा सकता है? इनपुट सत्यापन के अन्य तरीकों का सुझाव क्या होगा? – wilsonpage

+0

स्कीमा मोंगोज़ में बहुत कुछ करते हैं, सबसे महत्वपूर्ण बात यह है कि वे प्रकार को सही ढंग से मोंगोडब में सहेजते हैं लेकिन वे आपको सत्यापन, डिफ़ॉल्ट और अन्य ओडीएम सामान सेट करने देते हैं। फिलहाल एक मोन्गोज़ दस्तावेज़ के शीर्ष स्तर को अनिवार्य रूप से "मिश्रित" प्रकार के रूप में माना जाता है (जो कुछ भी स्वीकार करता है और केवल तभी सामान करता है जब संपत्ति अद्यतन स्कीमा में किसी संपत्ति से मेल खाती हो) - प्लगइन बलों को * केवल * स्वीकृति गुणों के लिए mongoose को मजबूर करता है स्कीमा –

+0

में एक mySQL पृष्ठभूमि से आ रहा है मैं पूरी तरह से mongoose समझने के लिए संघर्ष कर रहा हूँ। दस्तावेज़ मुझे स्पष्ट नहीं हैं। क्या आप कुछ संसाधनों या उदाहरणों की अनुशंसा कर सकते हैं। मैं कुछ भी उन्नत नहीं कर रहा हूँ। – wilsonpage

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