无法在node express中使用PUT更新mongo中的名称

时间:2017-01-15 02:20:15

标签: javascript node.js mongodb

我无法更新mongodb中的名称。该名称首先由用户保存在一个变量中并传递给这样的函数:putAjax(editName)然后它转到这里的函数:

function putAjax(editName) {
    $.ajax({
            type: "PUT",
            url: "/items/"+ editName,
            data: editName,
            dataType: 'json',
        })
        .done(function(result) { 
            console.log("result:", result);
            console.log("data successfully saved:");
        })
        .fail(function(jqXHR, error, errorThrown) {
            console.log(jqXHR);
            console.log(error);
            console.log(errorThrown);
        });
};

我可以使用console.log(结果),我可以看到编辑过的名称,所以我假设编辑发生了。最后,它在服务器上调用app.put:

app.put('/items/:name', function(req, res) {
    Item.find(req.params.name, function(err, items) {
        if (err) {
            return res.status(404).json({
                message: 'Internal Server Error'
            });
        }

       Item.findOneAndUpdate({
            name: req.params.name
        }, {
            $set: {
                name: req.params.name
            }
        }, { new: true },
        function () {
            res.json(items);
        });
    });
});

这是更新似乎不会发生的地方。当我使用mongo shell时,我仍然使用同一个文件,而不是编辑过的名称。令人困惑的部分是,为什么console.log(结果)会显示编辑后的名称。我真的很感激任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您没有将唯一密钥传递给数据库查询。您的意图是更改存储在数据库中的现有记录的名称,但您不会这样做。相反,您尝试查找与新名称值匹配的记录,并始终返回已发送到服务器的值。

相反,您需要使用AJAX请求传递唯一标识符,使用URL最有意义。

self::

服务器端代码:

function putAjax(id, editName) {
  var payLoad = { name: editName };
  $.ajax({
    type: "PUT",
    url: "/items/"+ id,
    data: payLoad,
    dataType: 'json',
  })
  .done(function(result) { 
    console.log("result:", result);
    console.log("data successfully saved:");
  })
  .fail(function(jqXHR, error, errorThrown) {
    console.log(jqXHR);
    console.log(error);
    console.log(errorThrown);
  });
};