我有一个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);
});
});
})
如果我只输入一个新的名字,那么我的文档将使用新名称进行更新,并删除所有其他字段。
有没有办法在更新时只传递一个或两个参数,只更改这些字段,而不会使另一个空白?
答案 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);
});
});
});