首页 > 解决方案 > PUT 请求不更新 MongoDB

问题描述

大家好 ,我是编程新手,我被这个困住了......

我正在使用 mongo 在节点中处理简单的单页 ToDo“应用程序”。我可以添加新的 ToDo,删除它,但是当我单击一个完成它时,它不起作用。

简单的猫鼬模式

let todoSchema = new mongoose.Schema({
    name: {
        type: String,
        required: 'Název musí být uveden!'
    },
    completed: {
        type: Boolean,
        default: false
    },
    created_date: {
        type: Date,
        default: Date.now
    }
}) 

通过“助手”路由

router.route("/")
    .get(helpers.getTodos)
    .post(helpers.createTodo);


router.route("/:todoId")
    .get(helpers.getTodo)
    .put(helpers.updateTodo)
    .delete(helpers.deleteTodo);

在助手中我得到了更新功能:

exports.updateTodo = function(req, res) {
    db.Todo.findOneAndUpdate({
            id: req.params.todoId
        }, req.body, {
            new: true
        })
        .then(function(todo) {
            res.json(todo);
        })
        .catch(function(err) {
            res.send(err);
        });
};

当我使用 Postman 发送 PUT 请求时,将完成更新为 true,postman 返回 null ... Postman put request image

因为我是新手,所以我认为我的 ajax 有问题,但后来我尝试了 Postman,它返回 null 并且我不知道出了什么问题。

function updateTodo(todo) {
    let updateUrl = "/api/todos/" + todo.data("id");
    let isDone = !todo.data("completed");
    let updateData = {
        completed: isDone
    };

    $.ajax({
        method: "PUT",
        url: updateUrl,
        data: updateData
    }).then(function(updatedTodo) {
        todo.toggleClass("done");
        todo.data("completed", isDone);
    });
}

当我单击一个时,它会更改类,我的 VS Code 中的终端显示如下:

Mongoose: todos._findAndModify(
{ id: '5e78a9ed4d68762accc14a7f' },
[], 
{ '$set': { completed: true } }, 
{ new: true, upsert: false, remove: false, projection: {} })

但是当我刷新时,它没有改变

标签: jquerynode.jsmongodbexpresspostman

解决方案


推荐阅读