2013-07-13 7 views
10

में प्रमाणीकरण मैं सत्यापन के लिए एक्सप्रेस-सत्यापनकर्ता का उपयोग कर रहा हूं। मैं डेटाबेस के लिए mongoose का उपयोग कर रहा हूँ, इसमें भी सत्यापन बनाया गया है। मैं जानना चाहता हूं कि मुझे किस का उपयोग करना चाहिए?एक्सप्रेस-वैलिडेटर

मैं यह भी जानना चाहता हूं कि एक्सप्रेस-सत्यापनकर्ता में सत्यापन समानांतर है या नहीं। उदाहरण के लिए इस कोड डालें:

req.checkBody('email', 'Invalid email').notEmpty().isEmail().isUnique(); 
req.checkBody('password', 'Invalid possword').notEmpty().len(8, 30); 
req.checkBody('first_name', 'Invalid first_name').notEmpty().isAlpha(); 
req.checkBody('last_name', 'Invalid last_name').notEmpty().isAlpha(); 
req.checkBody('dateofbirth', 'Invalid dateofbirth').notEmpty.isDate(); 

isUnique() एक कस्टम सत्यापन विधि अगर ईमेल पहले से ही पंजीकृत नहीं किया गया है या नहीं, यह बहुत मान्य करने के लिए डेटाबेस के लिए प्रश्नों की जाँच करता है कि है। यद्यपि ऊपर दिए गए कोड में उल्लेख नहीं किया गया है लेकिन मेरे पास कुछ अन्य पोस्ट अनुरोध भी हैं जहां मुझे कई फ़ील्ड को सत्यापित करने की आवश्यकता है जहां उनमें से प्रत्येक में डेटाबेस प्रश्न बनाए जाएंगे।

तो मैं जानना चाहता था कि उपरोक्त में से प्रत्येक चेक विधि को समानांतर में चलाने के लिए क्या संभव है क्योंकि इससे तेज़ हो जाएगा और मुझे और भी नोड पसंद आएगा। मैं स्पष्ट रूप से async की तरह समानांतर में चलाने के लिए एक मॉड्यूल का उपयोग करना चाहूंगा। मैं यह भी जानना चाहूंगा कि पहले से ही इन चेक विधियों को समानांतर में चल रहा है या नहीं?

कृपया इसे समझने में मेरी सहायता करें? अग्रिम में धन्यवाद।

उत्तर

10

express-validator ब्राउज़र/क्लाइंट द्वारा पारित इनपुट को सत्यापित करने के लिए है; मोंगोस की मान्यता नए बनाए गए दस्तावेज़ों को सत्यापित करने के लिए है। दोनों एक अलग उद्देश्य की सेवा करते हैं, इसलिए एक साफ-सुथरा जवाब नहीं है जिसके लिए आपको उपयोग करना चाहिए; आप दोनों का भी उपयोग कर सकते हैं।

सत्यापन के क्रम के रूप में: चेक श्रृंखला में किया जाएगा। इसे पर प्रदर्शित करने के लिए async.parallel() का उपयोग कर सकते हैं जैसे कि चेक समानांतर में किए जाते हैं, लेकिन वास्तव में वे तब से नहीं होंगे जब चेक सिंक्रोनस होते हैं।

संपादित: node-validator (और इसलिए express-validator) एक स्ट्रिंग सत्यापनकर्ता है। विशिष्टता के लिए परीक्षण एक स्ट्रिंग ऑपरेशन नहीं है लेकिन आपके डेटा मॉडल पर काम करता है, इसलिए आपको node-validator का उपयोग करने की कोशिश नहीं करनी चाहिए (वास्तव में, मुझे यह भी नहीं लगता कि आपको कर सकते हैं)।

इसके बजाय, मैं यह सुनिश्चित करने के लिए Mongoose की unique सुविधा का उपयोग करने का सुझाव दूंगा कि एक ई-मेल पता केवल आपके डेटाबेस में एक बार होता है।

वैकल्पिक रूप से, async-validate जैसे एसिंक ऑपरेशंस का समर्थन करने वाले एक सत्यापनकर्ता मॉड्यूल का उपयोग करें।

+0

मिश्रित किए बिना आपको आवश्यक डेटा और स्ट्रिंग सत्यापन कर सकें, मैं उन्हें समानांतर में क्यों नहीं बना सकता? मेरा मतलब है कि अगर यह async.parallel() करते हैं, तो यह अभी भी तुल्यकालिक क्यों होगा?ऐसा लगता है कि वे ऐसे कार्य हैं जो एक त्रुटि बनाते हैं जिसे हम इन मान्यताओं के बाद जांचते हैं। यदि मैं सही हूं तो हम समांतरता का उपयोग कर सकते हैं और सभी सत्यापन किए जाने के बाद त्रुटि की जांच कर सकते हैं। कृपया मुझे स्पष्टीकरण दें –

+0

'async.parallel' केवल एसिंक्रोनस कॉल (आई/ओ) के समानांतर होगा, जो एक्सप्रेस-सत्यापनकर्ता-कॉल नहीं हैं। आप [प्रासंगिक दस्तावेज] (https://github.com/ctavan/express-validator#validation-errors) देखें कि आप त्रुटियों को कैसे नियंत्रित कर सकते हैं (जो * सभी सत्यापन किए जाने के बाद भी किया जाता है)। – robertklep

+0

क्या यह एक्सप्रेस-सत्यापनकर्ता या नोड-सत्यापनकर्ता के साथ एक समस्या है? अगर इसका नोड-वैलिडेटर मुझे लगता है कि इसे ठीक करना मुश्किल है? लेकिन अगर यह एक्सप्रेस-वैलिडेटर के साथ मुझे उम्मीद है कि कुछ किया जा सकता है। –

6

दोनों mongodb unique बाधा और express-validator दोनों का उपयोग करके जटिल जटिल त्रुटियों का कारण बन जाएगा: आपको विभिन्न स्थानों में त्रुटियों का विश्लेषण करने और आराम प्रतिक्रिया के लिए सामान्य प्रारूप में अनुवाद करने की आवश्यकता है। https://maketips.net/tip/161/validate-username-available-using-express-validator

निष्कर्ष::

router.use(expressValidator({ 
    customValidators: { 
     isUsernameAvailable(username) { 
     return new Promise((resolve, reject) => { 
      User.findOne({ username: username }, (err, user) => { 
      if (err) throw err; 
      if(user == null) { 
       resolve(); 
      } else { 
       reject(); 
      } 
      }); 
     }); 
     } 
    } 
    }) 
); 

... 
req.checkBody('username', 'Username is required').notEmpty(); 
req.checkBody('username', 'Username already in use').isUsernameAvailable(); 


req.asyncValidationErrors().then(() => { 
... 

आप की जरूरत है, अपनी वेबसाइट पर इस कोड के साथ कुल उदाहरण देखें: तो एक और दृष्टिकोण कस्टम एक्सप्रेस सत्यापनकर्ता जो MongoDB में इस तरह के मूल्य के साथ रिकॉर्ड मिलेगा बनाने की जाएगी express-validator एसिंक्रोनस सत्यापन का भी समर्थन करता है ताकि आप उपयोगकर्ता सत्यापन और निम्न-स्तरीय डीबी बैकएंड सत्यापन

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

  • कोई संबंधित समस्या नहीं^_^