【问题标题】:NodeJS MongoDB Callback HellNodeJS MongoDB 回调地狱
【发布时间】:2015-06-17 13:16:55
【问题描述】:

我仍然遇到条件和数据库回调的问题,我编写了一个查询违规对象的路由函数,这是来自客户端填写的表单。我正在尝试更改拥有此违规行为的用户作为选项,我查询该用户并将其返回正常,但是在 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');
});

【问题讨论】:

    标签: node.js mongodb callback


    【解决方案1】:

    您需要使用事件来实现您想要的。以下只是一个高级解决方案。

    • 查询完成时触发事件。
    • 将上述事件与您的条件语句相关联。
    • 满足所需条件时触发另一个事件。
    • 将此事件与您的退货声明相关联。

    阅读 this 好的 tutplus 博客,了解节点 event module

    【讨论】:

      【解决方案2】:

      我相信你应该先了解一下回调函数的概念以及如何避免回调地狱 下面的链接将帮助您开始回调

      1. understanding callback functions
      2. callback hell

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-08
        • 2015-08-18
        • 2017-08-18
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 2017-05-08
        相关资源
        最近更新 更多