猫鼬findByIdAndUpdate无法正常工作。包含{new:true}

时间:2020-05-19 12:18:44

标签: javascript node.js mongodb express mongoose

我试图编辑信息并更新它,但是猫鼬的findByIdAndUpdate无法正常工作。包含{new:true},但仍显示原始的。在数据库中,信息也不会更新。控制台显示PUT / blogs /:id302。

路线如下:

//edit
router.get('/blogs/:id/edit', function (req, res) {
    Blog.findById(req.params.id, function (err, blogFound) {
        if(err){
            console.log(err);
        }else{
            res.render("edit", {blog: blogFound});
        }
    });
});

//update
router.put('/blogs/:id', function (req, res) {
    Blog.findByIdAndUpdate(req.params.id, req.body.blog, {new: true},function (err, blogUpdated) {
       if(err){
           console.log(err);
       } else{
           res.redirect('/blogs/' + req.params.id);
       }
    });
});

编辑表单如下:

<form class="ui form" action="/blogs/<%= blog._id %>?_method=PUT" method="POST">
        <div class="field">
            <label>Title</label>
            <input type="text" name="title" value="<%= blog.title %>">
        </div>
        <div class="field">
            <label>Image</label>
            <input type="text" name="image" value="<%= blog.image %>">
        </div>
        <div class="field">
            <label>Content</label>
            <textarea name="description"><%= blog.description %></textarea>
        </div>
        <button class="ui primary button" type="submit">Submit</button>
</form>

1 个答案:

答案 0 :(得分:0)

似乎req.body.blog未定义。

您体内的标题,图像和说明未归类到blog对象中,因此您应该撰写

const { title, image, description } = req.body;
Blog.findByIdAndUpdate(req.params.id, { title, image, description }, 

或类似的东西