Node / Mongoose:res.send()删除以前的Mongo更新

时间:2015-02-20 22:41:22

标签: node.js mongodb express mongoose

我正在使用Mongoose更新数组中的对象。更新后,我在回调中触发了res.send()

如果我不解雇res.send(),则更新保存正常。但是当我res.send()时,数组中的整个对象都会从Mongo中删除。

landmarkSchema.findById(tileRes.worldID, function(err, lm) {
  if (!lm){
    console.log(err);
  }
  else if (req.user._id == lm.permissions.ownerID){

    var min = tileRes.zooms[0];
    var max = tileRes.zooms.slice(-1)[0];

    if (lm.style.maps.localMapArray){
      for (var i = 0; i < lm.style.maps.localMapArray.length; i++) { //better way to do this with mongo $set 

          if (lm.style.maps.localMapArray[i].map_marker_viewID == req.body.map_marker_viewID) {

              lm.style.maps.localMapArray[i]['temp_upload_path'] = '';
              lm.style.maps.localMapArray[i]['localMapID'] = tileRes.mapURL;
              lm.style.maps.localMapArray[i]['localMapName'] = tileRes.worldID;

              lm.markModified('style.maps.localMapArray'); 

              lm.save(function(err, landmark) {
                  if (err){
                      console.log('error');
                  }
                  else {
                      console.log('updated map',landmark);
                      //res.status(200).send(landmark);
                  }
              });
          }
      }
    }

  }

}); 

res.send被解雇之前,Mongo没有完成写作的写入问题吗?

1 个答案:

答案 0 :(得分:0)

我建议开始使用async来迭代这些情况,当然你可以在没有它的情况下做到这一点,但是你必须找到一个很好的理由避免使用它。

我没有看到您方法的其余部分,但使用异步它应该与此类似:

async.each(lm.style.maps.localMapArray, function(localMap, callback) {    
  // Do whatever you like here
  //....
  // Call method that requires a callback and pass the loop callback
  localMap.iUseACallbackAfterDoingMyStuff(callback);
}, function(err){
    // now here the loop has ended
    if( err ) {
      // Something happened..
    } else {
      res.status(200).send(somethingToTheClient);
    }
});

代码片段仅供您了解。