2012-07-04 15 views
10

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

  1. सत्यापन (अद्वितीय, लंबाई)
  2. canonicalisation (उपयोगकर्ता नाम और ईमेल में बदल रही हैं लोअरकेस विशिष्टता की जाँच करने के लिए)
  3. नमक पीढ़ी
  4. पासवर्ड hashing
  5. (प्रवेश)

डीबी पर बने रहने से पहले इन सभी कार्यों को निष्पादित करने की आवश्यकता है। सौभाग्य से mongoose सत्यापन, प्लगइन्स और मिडलवेयर का समर्थन करता है।

बुरी बात यह है कि मुझे इस विषय पर कोई अच्छी सामग्री नहीं मिल रही है। mongoosejs.com पर आधिकारिक दस्तावेज़ बहुत कम हैं ...

क्या किसी के पास मोंगोस के साथ पूर्व कार्यों के बारे में कोई उदाहरण है (या एक पूर्ण प्लगइन जो सभी मौजूद है, यदि यह मौजूद है)?

सादर

+0

मैंने सोचा था कि mongoosejs.com पर दस्तावेज़ीकरण इस क्षेत्र में बहुत स्पष्ट था। आपने क्या प्रयास किया है जो काम नहीं कर रहा है? – JohnnyHK

+0

सत्यापन क्षेत्र स्पष्ट है लेकिन कुछ दृढ़ता से पहले वस्तु को कैसे तैयार किया जाए। मुझे लगता है कि Schema.pre ('सेव', कॉलबैक); फ़ंक्शन यह हो सकता है लेकिन पूरा उदाहरण गायब है, मुझे नहीं पता कि प्री फ़ंक्शन –

+0

में ऑब्जेक्ट के गुणों का उपयोग कैसे किया जाए, आप अपने मिडलवेयर फ़ंक्शन में 'this' के माध्यम से दस्तावेज़ के गुणों तक पहुंच सकते हैं। – JohnnyHK

उत्तर

24

अपने Schema.pre('save', callback) समारोह में, this दस्तावेज़ को सहेजा जा रहा है, और संशोधन next() बदल सहेजी गई कॉल करने से पहले इस पर की गई है।

14

गेटर्स का उपयोग करने का एक और विकल्प है। यहाँ की वेबसाइट से एक उदाहरण है:

function toLower (v) { 
    return v.toLowerCase(); 
} 

var UserSchema = new Schema({ 
    email: { type: String, set: toLower } 
}); 

http://mongoosejs.com/docs/getters-setters.html

+0

यह ध्यान देने योग्य है कि यह एकमात्र विकल्प है यदि आप जो मूल्य पारित कर रहे हैं वह वही प्रकार नहीं है जो निर्दिष्ट संपत्ति के लिए स्कीमा में परिभाषित किया गया है । ई जी आपके पास 'राशि' संपत्ति है जो कि 'संख्या' प्रकार है लेकिन प्रसंस्करण के लिए आपके द्वारा पारित मूल्य' स्ट्रिंग 'है। – Don

8
var db = require('mongoose'); 
var schema = new db.Schema({ 
    foo:  { type: String } 
}); 

schema.pre('save', function(next) { 
    this.foo = 'bar'; 

    next(); 
}); 

db.model('Thing', schema); 
+0

यह ध्यान दिया जा सकता है कि 'सेव' के लिए पूर्व अद्यतन पर आग नहीं है। इसके बजाए 'अपडेट' का प्रयोग करें – sasha

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