0

在下面的代码中,我在 console.log 中打印的值是正确的,但是当我搜索并将对象输入数据库时​​,数据库中的所有对象都包含相同的十六进制和图像路径,但 id 不同. 我首先尝试使用 findOne,但结果相同。我是 MongoDb 的新手,所以我假设这只是我做的愚蠢的事情。任何想法请以我的方式发送给他们:)

exports.addImage = function(req,res){
var params = req.body;
var colors = params.color;
var passedImg = params.path;
var ndxobj;
for(var index in colors){
    ndxobj = colors[index];
    //Values here are the correct index and contain valid data
    console.log("col: ", ndxobj);


    var query = clrModel.find({hex: ndxobj.hex}, function(err,result){
        if(!err && result.length > 0){
            console.log(result);
        }else if(!err){
            //We have an empty db for the searched obj
            var locclr = new clrModel({
              hex:      ndxobj.hex      
            });

            locclr.img.push({path:passedImg, date:ndxobj.imagedate});
            locclr.save(function(error, data){
                if(error){
                    console.log("Error in addImage find call: ",error);
                    res.json(error);
                }
                else{
                    console.log("Saving: ",data);
                    res.json(data);
                }
            });
        }else {
            //Handle error
        }
    });
}

};
4

1 回答 1

1

我认为您的路径都是相同的,因为您设置pathpassedImage,并且passedImage不是从每个索引更新,而是设置在代码示例的顶部。至于十六进制值都相同,这似乎正在发生,因为回调正在关闭 ndxobj,所以当它们被调用时,它们都在查看相同的值。为了使它工作,你需要使用一个函数来创建你的回调,如下所示(希望我关闭了所有的括号和括号......)。有关更多信息,请参阅此 StackOverflow 帖子

exports.addImage = function(req,res){
  var makeCallback=function(ndxobj){
    return function(err,result){
      if(!err && result.length > 0){
          console.log(result);
      }else if(!err){
          //We have an empty db for the searched obj
        var locclr = new clrModel({
          hex:      ndxobj.hex      
        });

        locclr.img.push({path:passedImg, date:ndxobj.imagedate});
        locclr.save(function(error, data){
          if(error){
            console.log("Error in addImage find call: ",error);
            res.json(error);
          }else{
            console.log("Saving: ",data);
            res.json(data);
          }
        });
      }else{
        //Handle error
      }
    };
  });
  var params = req.body;
  var colors = params.color;
  var passedImg = params.path;
  var ndxobj;
  for(var index in colors){
    ndxobj = colors[index];
    //Values here are the correct index and contain valid data
    console.log("col: ", ndxobj);


    var query = clrModel.find({hex: ndxobj.hex}, makeCallback(ndxobj.hex));
  }
};
于 2013-06-17T22:59:52.247 回答