如何退出节点回调到mongo并重定向?

时间:2014-03-31 05:00:27

标签: javascript node.js mongodb express return

我认为我对回调感到困惑,但我有以下代码,当主题名称无效时,我试图返回newpost_template。我认为我的逻辑是正确的,但它没有回归。它正好经过。它工作得很好,并在有newpost_template时呈现!title。欢迎任何建议,谢谢。

这有效:

if (!title) {
    var errors = "Post must contain a title";
    return res.render("newpost_template", {
        subject: title,
        username: req.username,
        body: req.body,
        tags: req.tags,
        errors: errors
    });
}

这不起作用:

users.findAllSubjectNames(title, req.username, res, req, function(err, doc) {
    "use strict"
    if (err) return next(err);
    console.log('doc');
    console.log(doc);

    if (doc === null) {
        console.log('this shows');
        var errors = "Subject name already taken!";
        console.log('this also shows');

        //return res.redirect(" / newpost ") 
        return res.render("newpost_template ", {
            subject: title,
            username: req.username,
            body: req.body,
            tags: req.tags,
            errors: errors
        });
        console.log('this doesnt show');
    }

});

this.findAllSubjectNames = function(title, user, res, req, callback) {
    "use strict";
    users.find({}, {
        "teacher.subject ": 1
    }).toArray(function(err, result) {
        "use strict ";
        if (err) return callback(err, null);

        console.log('result');

        for (var r = 0; r < result.length; r++) {
            for (var t = 0; t < result[r].teacher.length; t++) {
                if (result[r].teacher[t].subject == title && result[r]._id != user) {
                    console.log('INVALID!');
                    return callback(err, null);
                    //return res.redirect(" / newpost ")
                }
            }
        }
        return callback(err, result);
    });
}

1 个答案:

答案 0 :(得分:0)

我明白了。我必须将重定向和res.render放在if else子句中,这样只有一个会执行,并且只有在doc返回之后才会执行。我还必须把它分成它自己的功能。

 users.findAllSubjectNames(title, req.username, function(err, doc){
    "use strict"
    if(err) return next(err);

    //return res.redirect("/newpost") //res.render("newpost_template", {subject:title, username:req.username, body:req.body, tags:req.tags, errors:errors});
    if(doc === null){
        var errors = "Subject name already taken!";

        return res.render("newpost_template", {subject:title, username:req.username, body:req.body.body, tags:req.tags, errors:errors});
    } else {
        classNumber(title, req, res, next);
        return res.redirect("/profile");    
    }
 });