2016-03-22 15 views
0

Ich habe eine JavaScript-Löschfunktion erstellt, die Daten aus einer MongoDB-Datenbank entfernt. Das Problem ist, dass die Antwort leer ist. Irgendeine Idee, warum das passiert und wie ich das lösen kann? Ich brauche Fall 1 zum Laufen zu bringen ...Warum gibt mein Mongoose delete-Befehl eine leere Antwort zurück?

leer Antwort (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);    
      }); 
     }   
    }) 

Antwort nicht leer (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

@BlakesSeven Ich wusste es nicht durch asynchrone Rückrufe verursacht wurde, also bin ich nicht sicher, ob dies eine doppelte Frage ... – Engo

+1

Wenn Sie "wussten" dann hätten Sie nicht gefragt. Die Antworten dort sind genau das gleiche wie das, was du angenommen hast. Es ist die am häufigsten gestellte Frage. Es bedeutet nicht, dass jeder nicht weiß, dass es kein Duplikat ist. –

+0

@BlakesSeven Sie haben Recht, aber ich hatte Angst, dass meine Frage zu halten wäre, ohne zu wissen, die Existenz der Frage, die Sie mit mir geteilt ... So zum Glück teilen Sie den Link der doppelten Frage :) – Engo

Antwort

1

Es ist wegen der Rückrufe: res.json(response); im ersten Fall wird aufgerufen, bevor mongoOp.remove Anrufe Callback ist function(err) { ....

Node.js ist asynchron.

UPD: Und es ist besser, nicht temporären Variable response und extra if s hier zu verwenden:

.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

Es ist mein erster Tag in der Node.js Welt. Vielen Dank für Ihre Hilfe :) Ich hätte nie gedacht, dass es durch Rückrufe verursacht würde. Ich habe bemerkt, dass ich mehr über Rückrufe usw. lesen muss ... – Engo

+1

Gern geschehen! Viel Glück in der Node.js Welt. Seien Sie vorsichtig mit Rückrufen. Sie können zweimal aufgerufen werden, können nicht definiert sein und können aufgerufen werden, wenn Sie nicht erwarten, dass sie angerufen werden. Befolgen Sie die folgenden Best Practices: https://blog.risingstack.com/node-js-best-practices/ –

+0

. Außerdem finden Sie einige JavaScript-Best Practices und häufige Fehlerhandbücher. –

Verwandte Themen