Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js未保存方法PUT_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 节点js未保存方法PUT

Javascript 节点js未保存方法PUT,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在尝试更新数组中的对象值。我已经完成了方法并搜索了我想要的数组中的元素,然后返回200。但当我执行另一个请求后,返回到原始值的值没有保存 首先,这是模式: { "_id" : "1", "username" : "a", "elements" : [{"_id": "22", "name":"bb"}, {"_id":"33", "name": "cc"}] } 这就是我的方法 update = function

我正在尝试更新数组中的对象值。我已经完成了方法并搜索了我想要的数组中的元素,然后返回200。但当我执行另一个请求后,返回到原始值的值没有保存

首先,这是模式:

    { 
         "_id" : "1",
         "username" : "a",
         "elements" : [{"_id": "22", "name":"bb"}, {"_id":"33", "name": "cc"}]   
    }
这就是我的方法

update = function(req, res) {
        User.findById(req.params.id, function (err, user) {
        if (!user) {
            res.send(404, 'User not found');
        }
        else{
            var array = user.elements;
            for (var i = 0; i < array.length; i++) { 
                if (array[i]._id == "22") { 
                  result = array[i];
                  if (req.body.name != null) result.name = req.body.name;
                  result.save(function(err) {
                      if(!err) {
                          console.log('Updated');
                      } 
                      else {
                          console.log('ERROR: ' + err);
                      }
                      res.send(result);
                  });
                  break;
                } 
            }
        }
        });
    }
我不知道我做错了什么。我的意思是我简化了一切,但我认为问题出在方法上。

您必须保存用户对象,结果如下:

  update = function(req, res) {
            User.findById(req.params.id, function (err, user) {
            if (!user) {
                res.send(404, 'User not found');
            }
            else{
                var array = user.elements;
                for (var i = 0; i < array.length; i++) { 
                    if (array[i]._id == "22") { 
                      result = array[i];
                      if (req.body.name != null) result.name = req.body.name;

                      break;
                    } 
                }
                 user.save(function(err) {
                          if(!err) {
                              console.log('Updated');
                          } 
                          else {
                              console.log('ERROR: ' + err);
                          }
                          res.send(user);
                      });
            }
            });

        }

您应该只执行res.sendresult一次。首先使用或特别是更新所有元素,然后执行res.send一次。您还应该使用模式编辑您的问题。我相信res.send只调用一次@Mikey-尽管很难用缩进来区分。如果它有什么内容,您是否控制台了req.params.id?在找到错误后,您是否尝试用控制台解决错误?你的代码停在哪里?到目前为止您打印了什么控制台?您确定不需要user.save吗。