2016-02-11 7 views
6

मेरे पास एक Sequelize मॉडल में beforeCreate हुक है (User तालिका में पासवर्ड पर bcrypt चलाता है), और बीज फ़ाइल में उपयोगकर्ता बनाना चाहते हैं। बल्कक्रेट जैसे फ़ंक्शन बस डेटाबेस में डालें, और इसलिए किसी भी हुक को कॉल न करें (createdAt/updatedAt सहित)। मैं ऐसे तरीके से बुलाए गए हुक के साथ कैसे बना सकता हूं जो कि बीडर द्वारा आवश्यक प्रारूप से मेल खाते हैं?सीक्वेलिज़ में थोक बनाने पर मैं क्रेट हुक को पहले कैसे ट्रिगर कर सकता हूं?

ऐसा लगता है कि बहुत से लोग sequelize-fixtures का उपयोग कर रहे हैं? क्या यह जाने का रास्ता है? या मैं सिर्फ बीज प्रारूप को अनदेखा कर सकता हूं, और मानक .create/.build और .save प्रारूप का उपयोग कर सकता हूं?

इसके अलावा, बीजिंग से संबंधित दस्तावेज कहां स्थित है? जानकारी के संदर्भ में Google खोज बहुत हल्की थीं।

User.bulkCreate(users, {individualHooks: true}).then(function() { 
    console.log("Done!"); 
}); 

कुछ (लेकिन थोड़ा) इस विकल्प here के बारे में दस्तावेज़ नहीं है:

उत्तर

5

, जब bulkCreating के रूप में नीचे सही पर individualHooks विकल्प सेट करें।

इसके अलावा, यदि आप उपयोगकर्ताओं को पासवर्ड बदलने की अनुमति दे रहे हैं, तो आपको beforeUpdate हुक भी जोड़ना चाहिए। आप दो बार bcrypt द्वारा पासवर्ड को संसाधित होने से रोक सकते हैं (जब पासवर्ड के अलावा उपयोगकर्ता के गुण अपडेट किए जाते हैं) निम्न तरीके से:

function hashPassword(user, options, fn) { 
    //Don't hash if password is already hashed 
    if (user.dataValues.password.indexOf('$2a$') === 0) { 
    fn(null, user); 
    return; 
    } 

    bcrypt.hash(user.password, 10, function(err, hash) { 
    if (err) { 
     console.log('Error while generating hash!'); 
     fn(err, null); 
     return; 
    } 
    user.password = hash; 
    fn(null, user); 
    }); 
} 
संबंधित मुद्दे

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