【问题标题】:update only params passed to express/mongoosd仅更新传递给 express/mongoosd 的参数
【发布时间】:2017-03-26 10:50:57
【问题描述】:

我有一个我整理的 Express Mongoose API。当我使用 PUT 端点时,我必须将所有参数与我更改的任何字段一起传递。如果我只通过一个,那么所有其他字段都将变为空白。

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

名字:字符串, 姓氏:字符串, 电子邮件:字符串, 发布日期:日期, 评论:字符串, 率:数字

我的 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);

    });

  });

})

如果我只输入一个新名字,那么我的文档会更新为新名字,并且所有其他字段都会被删除。

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

【问题讨论】:

  • 你可以试试下面的逻辑

标签: express mongoose


【解决方案1】:

您可以尝试使用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);

    });

  });

});

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 2016-10-06
    • 2014-04-23
    • 2022-01-12
    • 2019-02-02
    • 2023-03-27
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多