我目前正在尝试学习速成知识,并且正在研究Reddit的一个克隆。我有一个中间件功能,可以检查您是否是subreddit的主持人。我一直收到错误消息“发送后无法设置标题”。经过一番摆弄之后,我注意到如果运行以下代码,这就是输出:
// checking: 5b4f905adcee540d9f5fb61b
// MATCH
// checking: 5b4f92fd2a74d10e2095f993
// REDIRECT TO fr/:name
middlewareObj.isModerator = function(req, res, next) {
Subfreddit.findOne({name: req.params.name}, function(err, foundSubfreddit) {
if(err) {
return res.redirect("/fr/" + req.params.name);
}
foundSubfreddit.moderators.forEach(function(mod) {
console.log("checking: " + mod);
if(mod._id.equals(req.user._id)) {
console.log("MATCH");
match = true;
return next();
}
});
console.log("REDIRECT TO fr/:name")
res.redirect("/fr/" + req.params.name);
});
};
根据我的理解,当我下次返回时,我假设该函数将停止并继续进行下一个过程。根据输出,情况似乎并非如此,而且还在继续。当它尝试重定向时,它已经在路由上发送了信息。为什么显示此行为? (我通过添加一个名为“ match”的布尔值解决了该问题,如果它为true,则不会重定向)。