2016-11-12 22 views
0

我有一个Express Mongoose API,我把它放在一起。当我使用PUT端点时,必须将所有参数都传递给我更改的任何字段。如果我只通过一个,那么所有其他领域都变成空白。只更新params传递给express/mongoosd

例如,假设我有以下的集合:

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

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

    }); 

    }); 

}) 

如果我只输入一个新的直呼其名,然后在我的文档与更新新名称和所有其他字段被删除。

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

+0

您可以尝试使用下面的逻辑 – Aruna

回答

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

    }); 

    }); 

});