2011-09-29 21 views
14

में फॉर्म सत्यापन के साथ विशेष रूप से नेस्टेड मॉडल के साथ फॉर्म सत्यापन कैसे संभालते हैं, आप एक्सप्रेस और मोंगोस के साथ फॉर्म सत्यापन कैसे प्रबंधित कर रहे हैं? क्या आप कस्टम विधियों, कुछ प्लगइन, या डिफ़ॉल्ट त्रुटियों सरणी का उपयोग कर रहे हैं?आप नोड.जेएस + एक्सप्रेस + मोंगोस + जेड

जबकि मैं शायद कुछ बहुत ही सरल सत्यापन के लिए डिफ़ॉल्ट त्रुटियों सरणी का उपयोग कर देख सकता था, कि दृष्टिकोण नेस्ट मॉडल होने के परिदृश्य में उड़ा रहा है।

उत्तर

18

मैं व्यक्तिगत रूप से जाँच के लिए node-validator का उपयोग करता है, तो उपयोगकर्ता से सभी इनपुट फ़ील्ड भी यह नेवला को प्रस्तुत करने से पहले सही है।

नोड-सत्यापनकर्ता भी सभी त्रुटियों को तो उपयोगकर्ता के लिए प्रस्तुत किया जा सकता है की एक सूची बनाने के लिए अच्छा है।

+0

मैंने इसे नहीं देखा था, धन्यवाद। मुझे पसंद नहीं है कि सत्यापन/मार्ग नियंत्रक तर्क के लिए सत्यापन कितनी बारीकी से बंधे हैं। ऐसा लगता है कि आप खुद को एक अच्छा बिट दोहराएंगे। – Chance

+2

आप कहां से संभाले गए सत्यापन को पसंद करेंगे? नियंत्रक/मार्ग सही जगह है, क्योंकि यह आपके सिस्टम में डेटा का "प्रवेश बिंदु" है। आप मॉडल को ऑफ़लोड कर सकते हैं, लेकिन मॉडल डेटा दृढ़ता/पुनर्प्राप्ति के बारे में चिंतित है। नियंत्रक/मार्ग सबसे अच्छी जगह है। – jcolebrand

+5

अधिकांश डोमेन संचालित डिज़ाइन में, मॉडल व्यवसाय तर्क, डेटा अखंडता और नियम सत्यापन से संबंधित हैं जबकि अन्य खिलाड़ियों (और यहां तक ​​कि स्वयं) डेटा दृढ़ता/पुनर्प्राप्ति से संबंधित हैं। मुझे एहसास है कि मॉडल डेटा हिस्से को संभालते हैं, लेकिन मेरा मानना ​​है कि उन्हें सत्यापन भी संभालना चाहिए। मैं वास्तव में इसे "ऑफलोडिंग" पर विचार नहीं करता। – Chance

14

नेवला सत्यापन मिडलवेयर है। आप व्यक्तिगत रूप से स्कीमा वस्तुओं के लिए सत्यापन कार्यों को परिभाषित कर सकते हैं। नेस्टेड आइटम भी मान्य किया जा सकता है। इसके अलावा आप एएसआईएन सत्यापन को परिभाषित कर सकते हैं। अधिक जानकारी के लिए mongoose page देखें।

var mongoose = require('mongoose'), 
    schema = mongoose.Schema, 
    accountSchema = new schema({ 
     accountID: { type: Number, validate: [ 
     function(v){ 
      return (v !== null); 
     }, 'accountID must be entered!' 
     ]} 
    }), 
    personSchema = new schema({ 
     name: { type: String, validate: [ 
     function(v){ 
      return v.length < 20; 
     }, 'name must be max 20 characters!'] 
     }, 
     age: Number, 
     account: [accountSchema] 
    }), 
    connection = mongoose.createConnection('mongodb://127.0.0.1/test'); 
    personModel = connection.model('person', personSchema), 
    accountModel = connection.model('account', accountSchema); 

... 
var person = new personModel({ 
    name: req.body.person.name, 
    age: req.body.person.age, 
    account: new accountModel({ accountID: req.body.person.account }) 
}); 
person.save(function(err){ 
    if(err) { 
    console.log(err); 
    req.flash('error', err); 
    res.render('view'); 
    } 
... 
}); 
+0

हाँ, लेकिन अगर आपको PersonSchema = new Schema ({account: AccountSchema}) पसंद है; जहां खाताशेमा के पास सत्यापन है, त्रुटियों को बुलबुला नहीं किया जाता है। – Chance

+0

यह इस तरह से काम कर रहा है :) – Erhan

+0

स्टीफन: मुझे लगता है कि बैकबोन के मॉडल सत्यापन का उपयोग क्लाइंट साइड पर किया जा सकता है। लेकिन यह कुछ हद तक भ्रमित, मिश्रित ग्राहक/सर्वर साइड कोड हो सकता है। [Dailyjs इसके बारे में लिखा] (http://dailyjs.com/2011/04/04/node-tutorial-19/) – Erhan

5

मैं व्यक्तिगत रूप से सत्यापन करने के लिए express-form मिडलवेयर का उपयोग करता हूं; इसमें फिल्टर क्षमता भी है। यह नोड-सत्यापनकर्ता पर आधारित है लेकिन एक्सप्रेस के लिए अतिरिक्त बोनस है। यह अनुरोध ऑब्जेक्ट में एक संपत्ति जोड़ता है जो इंगित करता है कि यह मान्य है और त्रुटियों की एक सरणी देता है।

मैं इस का उपयोग आप एक्सप्रेस उपयोग कर रहे हैं होगा।

+1

चाज़, क्या आपके पास एक्सप्रेस फॉर्म में स्वच्छता विधियों के साथ नेस्टेड डेटा तक पहुंचने का कोई अच्छा तरीका है? –

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