2016-03-22 13 views
0

MongoDBデータベースからデータを削除するJavaScript削除機能を作成しました。問題は、応答が空であることです。なぜこのようなことが起こり、どのように私はこれを解決することができますか?私は空の私のMongoose deleteコマンドが空の応答を返すのはなぜですか?

レスポンス...ケース1の作業を取得する必要があります(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);    
      }); 
     }   
    }) 

(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、したがって、私はこれがあるかどうかわからないです重複した質問... – Engo

+1

あなたが "知っている"なら、あなたは尋ねなかったでしょう。その答えはあなたが受け入れたものとまったく同じです。それは最もよくある質問です。それは誰もがそれが重複ではないことを知らないので、それを意味するものではありません。 –

+0

@BlakesSevenあなたは正しいですが、あなたが私と共有した質問の存在を知らずに、私の質問が成り立つのを恐れ​​ていました...だから、幸いにもあなたは重複質問のリンクを共有しました:) – Engo

答えて

1

それが原因でコールバックのです。 がコールバックfunction(err) { ...と呼ばれる前に、最初のケースのres.json(response);が呼び出されます。

Node.jsは非同期です。

UPD: そして、それは一時的な変数responseを使用しない方が良いですし、ここに余分なif S:

.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

これはNode.jsの世界での最初の日です。ご協力いただきありがとうございます:)私はそれがコールバックによって引き起こされるとは考えていませんでした。私はコールバックなどについてもっと読む必要があることに気づいた... – Engo

+1

あなたはようこそ! Node.jsの世界で幸運を祈る。コールバックには注意してください。彼らは2回呼び出すことができます、未定義にすることができますが、呼び出すことを期待していないときに呼び出すことができます。このようなベストプラクティスに従ってください:https://blog.risingstack.com/node-js-best-practices/ –

+0

また、JavaScriptのベストプラクティスとよくある間違いのガイドをご覧ください。 –

関連する問題