2017-05-16 17 views
-1

現在、このコードブロックは、私のStripeセットアップのバックエンドです。コールバック関数では、変数をユーザーのカードに課金される金額に設定します。私はこの値を別のルートファイルに送って、その量をブラウザにres.send()することができます。別のjsファイルに送信されたときに1つのjsファイルの変数が未定義になる

私がこれをしようとすると、何らかの理由で、ポイントaからポイントbまで未定義に設定されます。あなたがこの方法をプログラムすることができません

var stripeFile = require('stripe'); 

router.get('/dashboard', isLoggedIn, function(req, res, next) { 
    var messages = req.flash('error'); 
    res.render('users/dashboard', {messages: messages, hasErrors: messages.length > 0}); 
    console.log(stripeFile.theAmount); 
}); 
+0

パラメータとして渡しますか?複数のユーザーが1つの変数を持つと重大な問題が発生することがあるアプリを使用する場合は、頭に入れてください。 –

+0

@DaveNewton、変数をルートファイルに取得する方法が見つかりましたが、この変数をブラウザでどのように表示できますか?現在、router.get()の内部にあります。私はそれが表示されたいページのために。 – kolbykskk

答えて

0

router.post('/charge', function(req, res, next) { 
    var token = req.body.stripeToken; 
    var chargeAmount = req.body.amount[0]; 
    var charge = stripe.charges.create({ 
     amount: chargeAmount, 
     currency: "usd", 
     source: token 
    }, function(err, charge) { 
     if(err) { 
     return console.log(err); 
     } 
     module.exports.theAmount = charge.amount; 
     res.redirect('/users/dashboard'); 
    }); 
}); 

module.exports = router; 

ここで私はへの電荷量を取得しようとしているルートファイルからのコードです。あなたのサーバーは、多くの異なるユーザーからの要求を処理します。 charge.amountをグローバルにモジュール化して、リダイレクトがバグであった後に別のリクエストで後で使用できるようにしようとしました。また、一度動作したとしても、複数のユーザーがすぐに競合状態になることが保証されていますあなたのサイトを使用しています。あなたはこのようにプログラムすることはできません。

ここではすべての問題について説明していませんが、通常はリダイレクトを使用せずにデザインの問題を解決する方がよいでしょう。そうすれば、リダイレクトされたリクエストが再び戻ってくるのを待つ間に、ユーザー固有の場所にcharge.amountを保存する必要がなくなります。どこかに格納する必要がある場合は、flashモジュールを使用するか、各ユーザーにセッションオブジェクトを作成してセッションにデータを格納する必要があります(フラッシュは同様のことを行いますが、そのユーザー)。セッションはクッキーを介してユーザーに結び付けられます。そのため、次のリクエストがリダイレクトから来ると、セッションミドルウェアはCookieを識別し、そのCookieに属するセッションオブジェクトを検索して、リクエストハンドラが任意のデータにアクセスできるようにしますそのユーザーのセッションに入れてください(例えば、charge.amountの値)。

.post()ハンドラから直接コンテンツを返す方がよいでしょう。リクエストハンドラにすでにcharge.amountの値があるので、その値を使用してテンプレートを簡単にレンダリングし、ポストの後にそのコンテンツをブラウザに返すことができます。その後、その値をサーバー上のどこにでも保存して、将来のリクエストを待つ必要はありません。

+0

私は料金をユーザーのセッションに保存した後、ブラウザでその値を使って "クレジット:$ 10.00"のように表示するにはどうすればいいですか?セッションが期限切れになるので、値は常に正しいとは限りません。 – kolbykskk

+0

@kolbykskk - ユーザーの永久保存データは、いつでも照会できるサーバー上のデータベースに移動する必要があります。セッションデータは、セッションクッキーの存続期間とセッションデータの保存期間に応じて、数分または数日かかる「セッションの継続時間」に関するデータです。 – jfriend00

関連する問題