不允许用户两次进行测验

时间:2016-07-25 00:30:27

标签: node.js mongodb express passport.js

我正在使用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为真,我希望理想情况下将用户重定向回仪表板。我遇到的问题是每次我尝试到达上面的路线时停止的网页,即加载栏永远不会结束。

1 个答案:

答案 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
    }
});