2017-03-17 3 views
0

私は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'); 
      }); 
     }); 
     }); 
    }); 

答えて

0

returnres.redirect()の前に使用してください。実行を停止します。

if (err) 
    return res.redirect('/anywhere'); 
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')あなたのケースでの送信フォームの値のベースであるにリダイレクト。

関連する問題