Javascript Mongoose:将JS对象直接插入数据库

Javascript Mongoose:将JS对象直接插入数据库,javascript,mongodb,node.js,express,mongoose,Javascript,Mongodb,Node.js,Express,Mongoose,好的,我有一个JS对象,它通过AJAX发布到nodejs后端。我想将这个js对象直接插入我的mongoose db,因为对象键已经与db模式完美匹配 我目前有这个(不是动态的,过于复杂): app.post('/items/submit/new-item', function(req, res){ var formContents = req.body.formContents, itemModel = db.model('item'), newitem

好的,我有一个JS对象,它通过AJAX发布到nodejs后端。我想将这个js对象直接插入我的mongoose db,因为对象键已经与db模式完美匹配

我目前有这个(不是动态的,过于复杂):

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');
});
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');
});
但是想把它精简成这样(性感和动感):

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');
});
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');
});

如果您在mongoose()中使用这样的插件,您可以在表单中组合一个数组,比如
newitem[item\u title]
newitem[item\u abv]
——或者
item[title]
item[abv]

如果元素匹配,您也可以传递整个
req.body
。MongooseStrict插件将过滤掉模式中未显式设置的任何值,但它仍然将检查类型和验证留给mongoose。通过在模式中设置适当的验证方法,您将不会受到任何注入攻击

编辑:假设您已经实现了插件,您应该能够使用此代码

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

“好的,我有一个通过AJAX发布到nodejs后端的JS对象。我想将这个JS对象直接插入我的mongoose db,因为对象键已经与db模式完美匹配。”听起来像是某种注入攻击的极好载体,类似于。在发送数据之前,最好在服务器上处理和验证数据。客户不可信任。是的,我知道。这是一个测试用例。这不是我的问题。所以这是一个糟糕的测试用例,因为您应该始终验证数据:)我目前正在类似的环境中工作,并成功地测试了validate.js以验证数据。感谢您描述的方法在不需要插件的情况下工作。不过,我肯定需要在以后的某个日期实施它,以确保安全性。如果可以像这样覆盖模式,那么模式中有什么意义?您还建议使用哪些其他输入验证方法?模式在mongoose中有很多作用,最重要的是它们将类型正确地保存到mongodb中,但它们还允许您设置验证、默认值和其他ODM内容。目前,mongoose文档的顶层本质上被视为类型“Mixed”(当更新的属性与模式中的属性匹配时,它接受任何东西,并且只做一些事情)——该插件强制mongoose只接受模式中的属性从mySQL背景开始,我正在努力完全理解mongoose。这些文件我不太清楚。你能推荐一些资源或例子吗。我不想做任何高级的事情。谷歌小组是一个很好的起点,你通常可以在freenode上的#node.js中很快找到irc的帮助。net@NikMartin模式现在默认是严格的