无法弄清楚 Parse Hosting - Cloud Code Integration

Can't figure out Parse Hosting - Cloud Code Integration

我已经研究这个看似简单的问题大约一个星期了,感觉信息相互矛盾,希望有人能给我一些启发。我正在尝试将 Parse Hosting 用于带有 bootstrap 的营销网站,只是 HTML 和 CSS 以及一些 JS;和 Cloud Code 来执行一些简单的服务器端任务,例如通过 Stripe 为卡充电。文档中的所有内容都让这看起来很容易实现,但文档似乎也让我相信某些方法并非如此。

例如,此视频展示了一名 Stripe 工程师正在构建我想要的东西。然而,他在前端使用纯 HTML 和 CSS 而不是 Express 模板引擎(我没有使用)还不是很清楚 - http://blog.parse.com/videos/parse-developer-day-2013-a-new-kind-of-checkout/

这个 post 说 Parse Hosting 和 Express 现在携手合作,太棒了! http://blog.parse.com/announcements/building-parse-web-apps-with-the-express-web-framework/

但是文档(JS > Cloud Hosting > Dynamic Websites)说你必须删除 index.html >> "If you choose to use Express or Node.js, you'll first need to delete public/index.html so that requests can get through to your custom handler functions."

我想在 public/index.html 上托管一个单页网站,它使用 Stripe Checkout v3 创建一个令牌,然后将其传递给 Parse 以快速执行收费,但同样, 到目前为止我尝试的每一种方法都没有成功。

此外,我认为纯 HTML/CSS 的 Parse Hosting 无法按照我想要的方式与 Cloud Code 一起使用,因为下面的 /hello 的简单调用 returns 什么都没有。

这是我的代码:

//public
//index.html
<form action="/charge" method="POST">
  <script 
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="pk_test_zippitydoo"
    data-image="http://image.jpg"
    data-name="Thing"
    data-description="Shut up and take my money"
    data-amount="4000">
  </script>
</form>

//cloud
//main.js
var express = require('express');
var app = express();

var Stripe = require('stripe');
Stripe.initialize('sk_test_blahblahblah');

app.get('/hello', function(req, res) {
  res.send('hello world');
});

app.post('/charge', function(req, res) {
  res.send('Charge Attempt');
  token_id = req.body.stripe_token
  Stripe.Tokens.retrieve(token_id).then(function(token) {
    return Stripe.Charges.create({
      amount: 1000,
      currency: "usd",
      source: token_id
    });
  });
});

您需要的是快递服务您的 HTML。为此,注册一个静态资源目录。在您的 main.js 中,在您使用 var app = express() 实例化您的应用后,请执行以下操作:

app.use(express.static('public'));

Express 应默认将您的 /public/index.html 文件视为目录索引,并且您的应用程序将提供 /public 下的任何其他文件。更多信息:http://expressjs.com/4x/api.html#express.static

这里有几处我做错了。我会解释我的错误,然后你可以在不正确的问题中比较下面的代码和上面的代码。

1) 我没有解析我接收到的数据(见下方 // 应用程序配置部分) 2)传递的JSON需要使用CamelCase解析(stripeToken不是stripe_token) 3) charge 设置为变量,而不是 returned(var = charge 而不是 return charge)。 Return 可能有效,但我没有测试过。 4) 必须包含 app.listen();为了从云文件夹

连接到public文件夹
//cloud
//main.js

var express = require('express');
var Stripe = require('stripe');
Stripe.initialize('sk_test_blahblahblah');

var app = express();

// App configuration section
app.use(express.bodyParser());    // Middleware for reading request body

app.post('/charge', function(req, res) {
  var stripeToken = req.body.stripeToken;
  var stripeEmail = req.body.stripeEmail;

  res.send('Charging your card...');

  var charge = Stripe.Charges.create({
      amount: price,
      currency: "usd",
      source: stripeToken,
      receipt_email: stripeEmail
  }, function(err, charge) {
    if (err && err.type === 'StripeCardError') {
      res.send('The card has been declined. Please check your card and try again.');
    }
  });
});

// Attach the Express app to your Cloud Code
app.listen();