2015-01-28 8 views
11

SailsJS bulma, güncelleştirme, oluşturma, vb. Gibi varsayılan plan eylemleri sağlar.Özel bir geçersiz kılma içinde varsayılan blueprint eylemleri nasıl aranır?

Bazıları belirli iş amaçlarına uyacak şekilde geçersiz kılmam gerekiyor. Ancak, onları geçersiz kılmak yerine, onlara eklemek istiyorum. Geçersiz kılma eyleminde varsayılan plan eylemleri nasıl aranır. Örneğin, güncelleme bir modelin kaydını güncelleyebilir.

update 

Modelin kaydını güncellemenin yanı sıra güncellemeyi daha fazla yapmak istiyorum. Özel güncelleme yöntemimde, varsayılan güncellemeyi çoğaltmak istemiyorum. Bunu nasıl yapabilirim?

cevap

3

şeyi kopyalamak

PROJECT-ROOT\node_modules\sails\lib\hooks\blueprints\actions 

den

PROJECT-ROOT\config\blueprints 

emin findOne.js olun edilir küçük. actionUtil.js'un konumuna referans yapmak için her birini değiştirmeniz gerekir. Şimdi tekerleği yeniden icat etmeden bunları kalp içeriğinizde değiştirebilirsiniz.

+0

Farklı modellerde bu geçersiz kılma eylemleri nasıl farklı yapılır? – windchime

+0

Bu bağlıdır. Modeller arasında büyük farklar varsa, muhtemelen muhtemelen planları kullanmak istemezsiniz. Denetleyicinizde, tek bir eylemin üzerine yazmak ve geri kalanını dokunulmadan bırakmak için tek bir yöntem ekleyebilirsiniz. Bu nedenle, Kullanıcı modeli için, o denetleyicide bir "güncelleme" yöntemi oluşturabilirim ve sadece bu mavikanın üzerine yazacak ve geri kalanını sağlam bırakacaktır. Ancak, farklılıklarınız küçükse, blueprint dosyalarındaki modelleri tanımlayabilir ve gerektiğinde ayarlamalar yapabilirsiniz. – Meeker

+0

Çözümünüzü denedim, ancak işe yaramadı. Kaldırma prosedürü sırasında hata aldım 'A hook ('userconfig') yüklenemedi!'. –

3

Sailsjs'de lifecycle callbacks'a bakmalısınız. Yani, örneğin, modeldeki daha fazlasını yapmak için beforeUpdate veya beforeCreate yaşam döngüsü geri arama kullanabilirsiniz:

var bcrypt = require('bcrypt'); 

module.exports = { 

    attributes: { 

    username: { 
     type: 'string', 
     required: true 
    }, 

    password: { 
     type: 'string', 
     minLength: 6, 
     required: true, 
     columnName: 'encrypted_password' 
    } 

    }, 


    // Lifecycle Callbacks 
    beforeCreate: function (values, cb) { 

    // Encrypt password 
    bcrypt.hash(values.password, 10, function(err, hash) { 
     if(err) return cb(err); 
     values.password = hash; 
     //calling cb() with an argument returns an error. Useful for canceling the entire operation if some criteria fails. 
     cb(); 
    }); 
    } 
}; 
+0

Ben BeforeUpdate yaşam döngüsü geri arama çalıştı:

add: function (req, res) { if (xxx) { // I need to do something only when the condition above is met Section.count({xxx: xxx)}).exec(function (error, count) { if (error) { return res.json(500, {error: 'There was an error while trying to run query'}); } //I do what I have to do return sails.hooks.blueprints.middleware.add(req, res); }); } else { //I just return the default blueprint's action return sails.hooks.blueprints.middleware.add(req, res); } } 

Yani öncelikle varsayılan planı fonksiyonları saklanır: Aşağıdaki gibi Yani, benim kod görünüyor. Ancak, bir modele gönderdiğimde, ör. Abc'nin model olduğu POST/abc, beforeUpdate de tetikleyicidir. Neden? – windchime

+0

Sanırım yapmamalı. Ayrıca 'beforeCreate' geri aramanız var mı? Belki de 'BeforeUpdate' işlevini tetikleyen sağlanan geri bildirimi kullanmadan orada bir model kuruyor ve kaydediyorsunuz? – r0hitsharma

8

Sadece aynı sorunla karşılaştım ve düzeltmek için farklı bir yol buldum. Birisi aynı sorunu varsa, gelecekte yardımcı olabilir. Sonunda yaptığım şey, denetleyicideki eylemi yeniden yazmaktı, benim durumumda add idi ve sonra içeride bazı şeyler yaptıktan sonra, varsayılan planın eylemi olarak adlandırıldı. sails.hooks.blueprints.middleware

+1

Bu, soruya bana cevap verdi. Bir şampiyon olduğun için teşekkürler – burntblark

+0

Başparmak :) –

+1

"Sails.hooks.blueprints.middleware" fonksiyonundaki tüm fonksiyonları hesaba katın küçük harfli isimler (örneğin 'findone') – GMunguia