无法在节点表达式中使用 PUT 更新 mongo 中的名称



我在更新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);
        });
};

我可以控制台.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 时,我拥有的一个文档仍然具有相同的名称,而不是编辑后的名称。 令人困惑的部分是,为什么控制台.log(结果)向我显示编辑后的名称。我非常感谢这方面的任何帮助。 谢谢。

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

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

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);
  });
};

服务器端代码:

app.put('/items/:id', function(req, res) {
  var data = req.body; // data should be validated
  Item.findOneAndUpdate({ _id: req.params.id }
    , { $set: data }
    , { returnOriginal: false }
    , function (err, result) {
      if (err) {
        return res.status(500).json({
          message: 'Internal Server Error.'
        });
      }
      return res.json(result);
    }
  );
});

最新更新