2013-02-19 24 views
5

bir firavunfaresi modeli model parametrelerinin geçenI bileşimleri, bir kullanıcı bir modele sahip bir ilişkisi olan bir firavunfaresi modeli var

var exampleSchema = mongoose.Schema({ 
    name: String, 
    <some more fields> 
    userId: { type:mongoose.Schema.Types.ObjectId, ref: 'User' } 
}); 

var Example = mongoose.model('Example', userSchema) 

Ben yeni bir model örneğini zaman yapın:

// the user json object is populated by some middleware 
var model = new Example({ name: 'example', .... , userId: req.user._id }); 

modelin yapıcı zaman şema değişiklikleri yazmak ve refactor için sıkıcı hale gelmiştir parametrelerin çok zaman alır. Böyle bir şey yapmanın bir yolu var mı:

var model = new Example(req.body, { userId: req.user._id }); 

Veya istek gövdesine userId takmak bile bir JSON nesnesi oluşturmak veya bir yardımcı yöntemi oluşturmak için en iyi yoldur? Yoksa düşünmediğim bir yolu var mı? Eğer req.body içine userId kopyalamak istiyorsanız

cevap

7
_ = require("underscore") 

var model = new Example(_.extend({ userId: req.user._id }, req.body)) 

ya: Ayrıca

// We "copy" the request body to not modify the original one 
var example = Object.create(req.body); 

// Now we add to this the user id 
example.userId = req.user._id; 

// And finally... 
var model = new Example(example); 

: seni doğru anladıysam

var model = new Example(_.extend(req.body, { userId: req.user._id })) 
2

, aşağıdaki çalışırken iyi olacağım aksi takdirde istenmeyen/saldırganlar verilerini kaydetmeye olabilir, senin Şema seçenekleri{ strict: true } eklemek unutmayın.

sıkı
+4

, bilmek güzel firavunfaresi 3. –

+0

beri varsayılan olarak ucu için teşekkür etkindir! – gustavohenke

+0

'Object.create', burada 'req.body' kopyasının olmadığı bir prototip nesne olarak kullanıldığından, buradaki gibi uygun görünmüyor. Kesinlikle emin Mongoose prototipin özelliklerini görmezden gelecektir. – JohnnyHK

İlgili konular