我正在使用Express,Passport,Handlebars和Mongoose / MongoDB来构建网站测验。我试图阻止同一个用户两次进行相同的测验。只有一个测验。一旦完成,他们就不能再拿它了。谁能告诉我我的代码有什么问题?
router.get('/tools/start-health-assessment', function(req, res) {
User.find({
_id: req.user._id,
assessmentTaken: true
}).then(function(err) {
if (err) {
throw err;
} else {
res.redirect('/users/dashboard');
}
});
});
此路线获得测验前的说明页面。我的逻辑是在此路由中使用Mongo查询。如果assessmentTaken
为真,我希望理想情况下将用户重定向回仪表板。我遇到的问题是每次我尝试到达上面的路线时停止的网页,即加载栏永远不会结束。
答案 0 :(得分:1)
如果你已经填充了req.user(我假设你的数据库与你的数据库相同),为什么不在处理程序中检查它,而不是进行另一个数据库查询?
EG:
router.get('/tools/start-health-assessment', function(req, res) {
// assuming your Passport middleware won't let a request get here w/o a user on it.
if (req.user.assessmentTaken) {
res.redirect('/users/dashboard');
} else {
res.render('health-assessment'); // or whatever you call it
}
});