错误后重定向?

时间:2017-03-17 14:33:43

标签: node.js regex mongodb function express

我有一个设置,让用户使用PassportJS创建一个帐户,并使用Stripe同时收费。这一切都有效。

问题是目前允许用户使用相同的用户名注册。该函数捕获user.save部分中的错误。然而,即使它捕获错误,它仍然完成创建新用户并为其充电。我需要回到那里。但是,我一直无法弄清楚如何res.redirect或该部分的东西。

如果出现错误,我如何更改我的代码以重定向?

app.post('/quiz', function(req, res) {


      var user = new User({
          username: req.body.username,
          email: req.body.email,
          password: req.body.password,
          datapoint: req.body.datapoint
        })



      user.save(function(err) {
        console.log('this is the problem' + ' ' + err)
        if(err){
          // I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
          // I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
          // I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
          // I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
          // I NEED TO REDIRECT BACK HERE IF THERE IS AN ERROR
        }

        var token = req.body.stripeToken; // Using Express
        var charge = stripe.charges.create({
         amount: 749,
         currency: "usd",
         description: "Example charge",
         source: token,

        }, function(err, charge) {
            if(err) {
              console.log(err);
            }
            console.log('charged')
            req.logIn(user, function(err) {
              if(err) {
                console.log(err);
              }
              console.log('all looks good')
              res.redirect('/jobquiz');
            });
        });
      });
    });

2 个答案:

答案 0 :(得分:0)

首先,您需要唯一验证您的用户名,以便在尝试使用相同的用户名时,将抛出唯一性错误。当你使用猫鼬时,我建议npm install mongoose-unique-validator。将您的用户名设置为唯一。 more info.

其次,捕获错误并将其重定向到当前表单(提交前的表单)

if (err) {
  // clear cache to prevent 304 response
  res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');

  return res.redirect('back');
}

'back'基于req.get('Referrer')的值,在您的情况下是提交表单。

答案 1 :(得分:0)

return之前使用res.redirect()。它将停止执行。

if (err)
  return res.redirect('/anywhere');