我认为我对回调感到困惑,但我有以下代码,当主题名称无效时,我试图返回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);
});
}
答案 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");
}
});