PUT请求仅在第二次尝试时发生

时间:2018-01-31 23:39:06

标签: express mongoose

我有一条明确的路线,可以更改帖子"已检查"它的值与布尔值相反(true => false,false => true)。出于某种原因,API返回与DB中相反的情况。如果我在PUT请求之后执行GET请求,则得到PUT路由给出的相反布尔值,这对于DB的状态是准确的。

这是路线。任何人都能看到这里发生了什么?

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部分正在更新数据库,但是返回下面的对象仍然是旧数据。

1 个答案:

答案 0 :(得分:1)

默认情况下findByIdAndUpdate会返回原始文档,您必须将return Post.findByIdAndUpdate(id, { "checked": !post.checked }, { new: true }) ... 选项设置为true才能获取修改后的文档而不是原始文档:

findByIdAndUpdate

Top Name = CONCATENATEX( TOPN( 1 , Table1 , Table1[Occurences] , DESC ) , Table1[Name] ) Api doc