只更新传递给express / mongoosd的params

时间:2016-11-12 08:28:05

标签: express mongoose

我有一个Express Mongoose API,我把它放在一起。当我使用PUT端点时,我必须使用我更改的任何字段传递所有参数。如果我只传递一个,那么所有其他字段都会变成空白。

例如,假设我有一个包含以下内容的集合:

firstname:String,   lastname:String,   电子邮件:String,   贴子:日期,   评论:字符串,   rate:Number

我的PUT代码如下所示:

.put(function(req, res){

  Guestbook.findById(req.params.id, function(err, guestbook){

    if(err)
      res.send(err);

    //UPDATE
    guestbook.firstname = req.body.firstname;
    guestbook.lastname = req.body.lastname;
    guestbook.email = req.body.email;
    guestbook.postedon = req.body.postedon;
    guestbook.comment = req.body.comment;
    guestbook.rate = req.body.rate;

    guestbook.save(function(err){

      if(err)
        res.send(err);

      res.json(guestbook);

    });

  });

})

如果我只输入一个新的名字,那么我的文档将使用新名称进行更新,并删除所有其他字段。

有没有办法在更新时只传递一个或两个参数,只更改这些字段,而不会使另一个空白?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Object.keys并查看undefined,如下所示。所以,你只能通过任何改变而不需要传递其他参数。

.put(function(req, res){

  Guestbook.findById(req.params.id, function(err, guestbook){

    if(err)
      res.send(err);

    //UPDATE
    Object.keys(req.body).forEach(function(prop) {
       if(typeof req.body[prop] !== 'undefined') {
          guestbook[prop] = req.body[prop];
       }
    });

    guestbook.save(function(err){

      if(err)
        res.send(err);

      res.json(guestbook);

    });

  });

});