2011-09-23 12 views
8

Tamam, AJAX aracılığıyla POSTED olan bir JS nesnesine nodejs arka ucuna. Bu js nesnesini, nesne anahtarları zaten db şemasıyla mükemmel şekilde eşleştiğinde doğrudan mongoose db'ye eklemek istiyorum.Mongoose: JS nesnesini doğrudan db'ye ekleme

Şu anda var bu (dinamik ve aşırı karmaşık değil):

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 

    formContents.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 
+2

* "Tamam ben nodejs arka uca AJAX POSTed olan bir JS nesnesi. Ben nesne anahtarları zaten db şema ile mükemmel maç olarak bu benim firavunfaresi db içine doğrudan nesne js eklemek istediğiniz var . * * [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection) gibi bir tür enjeksiyon saldırısı için bir ** mükemmel ** vektörü gibi görünüyor. Verileri göndermeden önce sunucuda işlemek ve doğrulamak için her zaman daha iyisi. Müşteriler güvenilir olamaz. –

+2

Evet biliyorum. Bu bir test vakası. Bu benim sorum değildi. – wilsonpage

+0

Bu yüzden, DAİMA veriyi doğrulamanız gerektiği için kötü bir test vakası :) Şu anda benzer bir bağlamda çalışıyorum ve validate.js'yi –

cevap

9

:

app.post('/items/submit/new-item', function(req, res){ 
    var formContents = req.body.formContents, 
     itemModel = db.model('item'), 
     newitem = new itemModel(); 

    newitem.item_ID   = ""; 
    newitem.item_title  = formContents.item_title; 
    newitem.item_abv  = formContents.item_abv; 
    newitem.item_desc  = formContents.item_desc; 
    newitem.item_est  = formContents.item_est; 
    newitem.item_origin  = formContents.item_origin; 
    newitem.item_rating  = formContents.item_rating; 
    newitem.item_dateAdded = Date.now(); 

    newitem.save(function(err){ 
     if(err){ throw err; } 
     console.log('saved'); 
    }) 

    res.send('item saved'); 
}); 

Ama bu (seksi ve dinamik) gibi bir şey için aşağı kırpmak istiyorum Eğer mongoose (http://tomblobaum.tumblr.com/post/10551728245/filter-strict-schema-plugin-for-mongoose-js) ile böyle bir eklenti kullanırsanız, formunuzda newitem[item_title] ve newitem[item_abv] - veyagibi bir dizi oluşturabilirsiniz.ve item[abv]

Ayrıca, elemanlar orada eşleşiyorsa, tüm req.body kodunu da geçirebilirsiniz. Bu MongooseStrict eklentisi, şemanızda açıkça ayarlanmamış herhangi bir değeri filtreleyecektir, ancak yine de kontrol türlerini ve onaylamayı mongoose'a kadar bırakır. Şemanızda uygun doğrulama yöntemleri ile, herhangi bir enjeksiyon saldırısından korunursunuz.

EDIT: Eklentiyi uyguladığınızı varsayarsak, bu kodu kullanabilmeniz gerekir.

app.post('/items/submit/new-item', function(req, res){ 
    new itemModel(req.body.formContents).save(function (e) { 
    res.send('item saved'); 
    }); 
}); 
+0

veriyi doğrulamak için başarıyla test ettim. Güvenlik sağlamak için kesinlikle daha ileri bir tarihte uygulamaya ihtiyacım olacak. Şemalarda bu şekilde geçersiz kılınabilecekleri nokta nedir? Başka hangi giriş doğrulama yöntemleri önerirsiniz? – wilsonpage

+0

Schemas mongoose'da çok şey yapar, en önemlisi türleri mongodb içine düzgün bir şekilde kaydeder, aynı zamanda doğrulama, varsayılanlar ve diğer ODM ürünlerini ayarlamanıza da izin verir. Şu anda bir mongoose doktorunun en üst düzeyine "Karışık" (her şeyi kabul eden ve yalnızca özellik şemadaki bir özellikle eşleştiğinde yalnızca bir şeyler yapan) türü gibi muamele edilir. - eklenti kuvvetleri yalnızca firavun kuvvetlerini * kabul eder * şemada –

+0

Bir mySQL arka planından geliyorum tam anlamıyla mongoose anlamak için mücadele ediyorum. Belgeler o kadar net değil. Bazı kaynaklar veya örnekler önerebilir misiniz. Gelişmiş bir şey yapmak istemiyorum. – wilsonpage