2016-03-22 11 views
0

MongoDB veritabanından verileri kaldıran bir JavaScript silme işlevi oluşturdum. Sorun, yanıtın boş olmasıdır. Bunun neden olduğu ve bunu nasıl çözebileceğim hakkında bir fikrin var mı? Ben ... Dava 1 çalışma almak gerekirMongoose silme komutum neden boş bir yanıt veriyor?

Tepki boş (1):

.delete(function(req, res) { 
     var response = {}; 
     if (password == req.body.token) { 
      mongoOp.findById(req.params.id, function(err, data) { 
       if (err) { 
        response = {"error": true, "message": "Error fetching data"}; 
       } else { 
        mongoOp.remove({_id: req.params.id}, function(err) { 
         if (err) { 
          response = {"error": true, "message": "Error deleting data"}; 
         } else { 
          response = {"error": true, "message": "Data associated with " + req.params.id + "is deleted"}; 
         }      
        }); 
       } 
       res.json(response);    
      }); 
     }   
    }) 

Tepki değil boş (2):

.delete(function(req, res) { 
     var response = {}; 
     if (password == req.body.token) { 
      mongoOp.findById(req.params.id, function(err, data) { 
       if (err) { 
        response = {"error": true, "message": "Error fetching data"}; 
       } else { 
        mongoOp.remove({_id: req.params.id}, function(err) { 
         if (err) { 
          response = {"error": true, "message": "Error deleting data"}; 
         } else { 
          response = {"error": true, "message": "Data associated with " + req.params.id + "is deleted"}; 
         } 
         res.json(response);      
        }); 
       }    
      }); 
     }   
    }) 
+0

Ben bu nedenle bu olup olmadığından emin değilim, asenkron geri aramaları neden oldu bilmiyordum @BlakesSeven yinelenen bir soru ... – Engo

+1

Eğer "biliyordun" diye sormazdın. Cevaplar, kabul ettiğiniz ile tamamen aynı. En sık sorulan soru. Bu, herkesin bilmediği anlamına gelmez, çünkü çift değildir. –

+0

@BlakesSeven Haklısınız, ama sorduğum soru, benimle paylaştığınız sorunun varlığını bilmeden beklemekten korkuyordu ... Neyse ki yinelenen sorunun bağlantısını paylaştınız :) – Engo

cevap

1

Çünkü geri aramaları var: İlk durumda res.json(response); den önce mongoOp.remove çağrıları geri arama function(err) { ... çağırır.

Node.js eşzamansızdır.

UPD: Ve burada geçici değişken response ve ekstra if s kullanmak daha iyidir:

.delete(function(req, res) { 
    if (password == req.body.token) { 
     mongoOp.findById(req.params.id, function(err, data) { 
      if (err) { 
       return res.json({"error": true, "message": "Error fetching data"}); 
      } 
       mongoOp.remove({_id: req.params.id}, function(err) { 
        if (err) { 
         return res.json({"error": true, "message": "Error deleting data"}); 
        } 
         return res.json({"error": true, "message": "Data associated with " + req.params.id + "is deleted"}); 
       });    
     }); 
    }   
}) 
+0

Bu Node.js dünyasındaki ilk günüm. Yardımınız için çok teşekkür ederim :) Bunun geri çekilmelerden kaynaklanacağını hiç düşünmemiştim. Geri bildirimler vb. Hakkında daha fazla şey okumam gerektiğini fark ettim ... – Engo

+1

Rica ederim! Node.js dünyasında iyi şanslar. Geri aramalarda dikkatli olun. İki kez çağrılabilirler, tanımlanamazlar, aranmalarını beklemediğinizde çağrılabilirler. Bunun gibi en iyi uygulamaları izleyin: https://blog.risingstack.com/node-js-best-practices/ –

+0

Ayrıca, bazı JavaScript en iyi uygulamalarını ve yaygın hata rehberlerini bulabilirsiniz. –