2015-06-17 83 views
1

我仍然遇到條件和數據庫回調的問題,我寫了一個路由功能,查詢違規對象,這是從客戶端填寫的表單。我試圖將擁有此違規行爲的用戶作爲選項進行更改,然後查詢該用戶並將其正確返回,但是在if語句中,由於我如何編寫此內容,x!= y將始終返回true。我希望它完成查詢,然後點擊條件。我覺得如何解決這個問題一直存在。NodeJS MongoDB回調地獄

if(viol.user != user[0]._id) 

當我編輯誰擁有該違規或對象,用戶沒有相同的對象翻來覆去添加到自己的用戶的方式。

app.post('/singleViolation/:violation', isAdmin, function(req, res) { 
    var violation = req.params.violation; 


    Violation.findById(violation, function(err, viol){ 
     if (err) throw err; 
     if (req.body.cause === '') { 
       req.body.cause = viol.cause; 
      } 
      if (req.body.date === '') { 
       req.body.date = viol.date; 
      } 
      if (req.body.location === '') { 
       req.body.location = viol.location; 
      } 


      if(req.body.email === '') { 
       req.body.email == viol.user; 
      } 

      if(req.body.email != '') { 

       User.find({"local.email" : req.body.email}, function (err, user) { 


        if (err) { 
         req.body.email = viol.user; 
        } 

        if(viol.user != user[0]._id) { 
         typeof viol.user; 
         typeof user[0].id; 
         console.log(viol.user); 
         console.log(user[0]._id); 
         console.log(viol.user === user[0].id); 
         viol.user = user[0]; 
         viol.save(); 

         user[0].local.violations.push(viol); 
         Vehicles.findById(viol.vehicle, function(err, veh) { 

          user[0].local.vehicles.push(veh); 
          veh.owner = user[0]; 
          veh.save(); 
          user[0].save(); 

         }); 

        } 
       }); 
      } 

      viol.cause = req.body.cause; 
      viol.date = req.body.date; 
      viol.location = req.body.location; 

      viol.save(); 

    }); 
    res.json(req.body); 
}); 
app.get('/editViolations/:violations', isAdmin, function(req, res) { 
    res.render('editViolations.ejs'); 
}); 

回答

2

您需要使用Events才能達到您想要的效果。以下只是一個高級解決方案。

  • 查詢結束時觸發事件。
  • 將上述事件關聯到您的條件語句。
  • 當您符合您所需的條件時觸發另一個事件。
  • 將此事件與您的退貨聲明關聯。

閱讀this好tutplus博客環繞節點event module你的頭。