试图传递<%> HTML变量到Javascript - 节点,Passport和Stripe

时间:2015-04-11 18:31:49

标签: javascript jquery html node.js

这里有点新手。我一直在寻找一个有效的答案,并发现了玉问题的一些相似之处,但我没有使用Jade。我已经通过了#34;用户"如下所示属性为HTML视图:

app.get('/profile', isLoggedIn, function(req, res) {
    res.render('profilePage/profilePage.html', {
        user : req.user // get the user out of session and pass to template
    });
});

然后,在我的个人资料HTML中,我可以像这样访问我的用户属性:

<%=user.local.firstname%>'s Profile

但是,我想允许Stripe通过Stripetoken发送用户的信用卡信息。我已设法从用户​​输入的文本字段中包含可变金额。但是,我想附加用户属性,以便我可以在回调中使用它。以下是配置文件html中包含的javascript / jquery:

                      <!-- New section -->
                  <script type="text/javascript">
                    <!-- Fill in your publishable key -->
                    Stripe.setPublishableKey('pkkey');

                   var stripeResponseHandler = function(status, response) {
                     var $form = $('#contactForm');
                     var $amount = $('#amount').val();


                     if (response.error) {
                       // Show the errors on the form
                       $form.find('.payment-errors').text(response.error.message);
                       $form.find('button').prop('disabled', false);
                     } else {
                       // token contains id, last4, and card type
                       var token = response.id;

                       // Insert the token into the form so it gets submitted to the server
                       $form.append($('<input type="hidden" name="stripeToken" />').val(token));
                       $form.append($('<input type="hidden" name="amount" />').val($amount));
                       // and re-submit
                       $form.get(0).submit();
                     }
                   };

                   jQuery(function($) {
                     $('#contactForm').submit(function(e) {
                       var $form = $(this);

                       // Disable the submit button to prevent repeated clicks
                       $form.find('button').prop('disabled', true);

                       Stripe.card.createToken($form, stripeResponseHandler);

                       // Prevent the form from submitting with the default action
                       return false;
                     });
                   });
                 </script>

正如您所看到的,我已设法附加$ amount变量,以便我可以在回调中访问它:

module.exports = function(app, passport) {

app.post('/stripe', function(req,res) {
    // =====STRIPETOKEN======
    var transaction = req.body;
    var stripeToken = transaction.stripeToken;
    var donationAmount = transaction.amount;

    stripe.customers.create({
      source           : stripeToken,
      account_balance  : 0
    },function(err, customer) {
        if (err) {
            console.log(err);
        } else {
            console.log("Success!");
    }});
    // ====CREATE CHARGE======
    var charge =
        {
       amount    : donationAmount, 
       currency  : 'USD',
       card      : stripeToken
        };
        stripe.charges.create(charge, function(err, charge) {
           if(err)
            console.log(err);
            else
          {
                res.json(charge);
                console.log('Successful charge sent to Stripe!');
                console.log(charge);
          };
      });
    // ====PROFILE PAGE REDIRECT=====
    res.render('profilePage/profilePage.html', {
    });
});

所以这就是我的问题。我希望将用户的信息(有点像我做的金额)传递给post方法,这样当它重定向成功时,我可以将它传回res.render函数,并将其发送给Stripe用于描述目的。我唯一能想到的是将用户信息放在HTML中的隐藏字段中并像这样访问它,但这听起来很混乱而且不合适。

这是我第一次在这里发帖,所以如果它太冗长或不够具体,我会道歉。谢谢!

1 个答案:

答案 0 :(得分:0)

答案就在于我在申请中宣布护照和条纹的方式。确保在所有内容后声明护照,以使用户变量可用于条带和所有视图。