所以我的看跌请求看起来像这样:
router.put('/user/:id', function(req, res, next){
User.findByIdAndUpdate({_id: req.params.id}, req.body).then(function(){
User.findOne({_id: req.params.id}).then(function(user){
res.send(user);
});
});
});
我想知道如何创建补丁请求主要是为了更新在我的用户模型中格式化的对象数组。我只想发送我想要更改的数据,而不是每次都重新发送整个数组。这也会引起问题,因为可能会立即发送对api的多个请求,这意味着它可能会错误地更新数据。那么上面代码的修补程序是什么?
谢谢,Ed。
答案 0 :(得分:0)
我测试了你的代码片段几次,在我看来它已经作为补丁请求工作,因为你可以发送你喜欢的任何数据并且它运行良好,它不会替换所有原始数据。
尽管如此,我发现你的代码非常复杂,因为它可以简单得多!
你正在寻找两次非常有用且完全不必要的东西。只需添加一个简单的参数 {new:true} ,就可以让 findByIdAndUpdate 返回更新后的用户。您也不需要使用 {_ id:} 表示法。
最后,如果发生错误,您也不会返回任何错误,这是一种非常糟糕的做法。
这是固定代码:
router.patch('/user/:_id', (req, res) => {
User.findByIdAndUpdate( req.params._id , req.body, {
new: true
}).then(function(user) {
res.send(user);
//in case of error
}, function(err) {
res.send(err);
});
});
另请注意我如何更改 router.patch 的router.put。这是一个非常好的做法,因为这个更新并不像普通的put请求那样替换原始数据,只是用你发送的任何内容来改变它,这使得这只是一个补丁请求。
希望这对某人有用!