在我的下面的代码中,我在console.log上打印的值是正确的,但是当我搜索并将对象输入到db中时,db中的所有对象都包含相同的十六进制和图像路径但是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
}
});
}
};
答案 0 :(得分:1)
我认为您的路径完全相同,因为您将path
设置为passedImage
,并且passedImage
未从每个索引更新,但是设置在代码的顶部样品。至于十六进制值是完全相同的,这似乎正在发生,因为回调正在关闭ndxobj,所以当它们被调用时,它们都看着相同的值。要做到这一点,你需要使用一个函数来创建你的回调,类似于下面的内容(希望我关闭所有的parens和amp括号......)。有关详细信息,请参阅this StackOverflow post。
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));
}
};