将req.body属性移动到模型对象的有效方法

时间:2012-11-30 18:11:03

标签: javascript node.js

我正在寻找一些快捷方式来创建一个crud REST api时我一直在做的一些繁琐的样板代码。我正在使用快递和发布我希望保存的对象。

app.post('/', function(req, res){
  var profile = new Profile();

  //this is the tedious code I want to shortcut

  profile.name = req.body.name;
  profile.age = req.body.age;
  ... and another 20 properties ...

  //end tedious code

  profile.save()
});

是否有一种简单的方法可以将所有req.body属性应用于配置文件对象?我将为不同的模型编写相同的crud代码,并且在开发过程中属性会经常变化。

4 个答案:

答案 0 :(得分:1)

for-in 循环怎么样,假设你的new Profile()会生成一个好的架构来放置值,这将避免req.body搞砸你。

for (var key in profile) {
  if (profile.hasOwnProperty(key) && req.body.hasOwnProperty(key))
    profile[key] = req.body[key];
}

更准确地说,对于这种情况,您应该为每个模块设置一个parse / stringify函数。所以你可以简单地打电话:

var profile = Profile.parse(req.body);

事实上,如果您正在使用非IE浏览器或在node.js / rhino中玩,并且您的req.body是 clean ,您可以这样做:

var profile = req.body;
profile.__proto__ = Profile.prototype;

你已经完成了。

答案 1 :(得分:0)

可以这样做:

for(key in req.body) {
  profile[key] = req.body[key];
}

答案 2 :(得分:0)

迭代所有键可能是一个坏主意。更好的是:

['name', 'age', ...].forEach(function(key) {
    profile[key] = req.body[key];
});

答案 3 :(得分:0)

最简单的方法是使用扩展运算符 (...)。

app.post('/', function(req, res){
  var profile = new Profile({...req.body});
  profile.save()
});