Express PUT请求仅在第二次尝试时发生
我有一个快速路由,它将帖子的“checked”值更改为其相反的布尔值(true=>false,false=>true)。由于某些原因,API返回的结果与数据库中的相反。如果我在PUT请求之后执行GET请求,我会得到PUT路由给我的相反的布尔值,它精确到数据库的状态 这是路线。有人看到这里发生了什么吗Express PUT请求仅在第二次尝试时发生,express,mongoose,Express,Mongoose,我有一个快速路由,它将帖子的“checked”值更改为其相反的布尔值(true=>false,false=>true)。由于某些原因,API返回的结果与数据库中的相反。如果我在PUT请求之后执行GET请求,我会得到PUT路由给我的相反的布尔值,它精确到数据库的状态 这是路线。有人看到这里发生了什么吗 app.put('/posts/:id', jsonParser, (req, res) => { let id = req.params.id; Post.findById(
app.put('/posts/:id', jsonParser, (req, res) => {
let id = req.params.id;
Post.findById( id )
.then(post => {
if(!post) {
return res.status(404).json({ message: 'Post not found' });
}
return Post.findByIdAndUpdate(id, { "checked": !post.checked })
})
.then(result => {
return res.status(202).json(result.apiRepr())
})
.catch(err => {
if(err) {
return res.status(500).json({ message: "There was a problem"})
}
});
});
.findByIdAndUpdate部分似乎正在更新数据库,但是下面返回的对象仍然是旧数据 默认情况下,返回原始文档,您必须将new
选项设置为true,才能获取修改后的文档而不是原始文档:
return Post.findByIdAndUpdate(id, { "checked": !post.checked }, { new: true }) ...
findbyiandupdate
我刚想出来。谢谢这就是答案。