NodeJS的MongoDBcallback地狱

我仍然有条件和数据库callback的麻烦,我写了一个路由function,查询违规对象,这是从客户端填写表格。 我试图改变拥有这个违规作为一个选项的用户,我查询该用户,并返回罚款,但在if语句,x!= y将永远返回true,因为我写这个的本质。 我希望它完成查询,然后打条件。 我觉得如何去解决这个问题一直存在。

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'); }); 

你需要使用事件才能达到你想要的。 以下只是一个高级解决scheme。

  • 查询完成后触发一个事件。
  • 将上述事件关联到你的条件语句。
  • 触发另一个事件,当你符合你所需的条件。
  • 将此事件与您的退货声明关联。

阅读这个很好的tutplus博客,围绕节点事件模块 。

我相信你应该先通过callback函数的概念,以及如何避免callback地狱下面的链接将帮助你开始callback

  1. 了解callback函数
  2. 回拨地狱