无法弄清楚 Parse Hosting - 云代码集成

Posted

技术标签:

【中文标题】无法弄清楚 Parse Hosting - 云代码集成【英文标题】:Can't figure out Parse Hosting - Cloud Code Integration 【发布时间】:2015-06-06 18:13:36 【问题描述】:

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

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

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

但是文档(JS > Cloud Hosting > Dynamic Websites)说你必须删除 index.html >> “如果你选择使用 Express 或 Node.js,你首先需要删除 public/index.html 所以请求可以通过您的自定义处理函数。”

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

此外,我认为纯 HTML/CSS 的 Parse Hosting 无法以我想要的方式与云代码一起使用,因为下面对 /hello 的简单调用不会返回任何内容。

这是我的代码:

//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
    );
  );
);

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

尝试了您的建议,但收到一条错误消息,提示没有“静态”方法 - TypeError: Object function createApplication() var app = connect(); utils.merge(app, proto); app.request = proto: req ; app.response = proto: res ;应用程序.init();返回应用程序; 在 main.js:3:23 处没有方法“静态” 我刚刚按照您的建议将这一行添加到问题中,并确认它与我当前的代码匹配。 所以我离得更近了一点,main.js 中非常必要的一行代码是 app.listen();这是 parse 需要将 /cloud 文件夹连接到 /public 文件夹以及仅使用 parse 和 express(删除 index.html 之后)。我仍然无法收费,但我可以验证访问 /hello 是否正确打印出“hello world”。 看起来 parse 砍掉了 express 的一些重要特性。 parse.com/docs/js/api/symbols/express.html。甚至 express.Response 对象也没有方法 sendFile()【参考方案2】:

我在这里做错了几件事。我会解释我的错误,然后您可以将下面的代码与上面的代码进行比较,而不是。

1) 我没有解析收到的数据(请参阅下面的 // 应用配置部分) 2)传入的JSON需要使用CamelCase解析(stripeToken不是stripe_token) 3)charge 设置为变量,不返回(var = charge 而不是return fee)。返回可能有效,但是我没有测试它。 4) 必须包含 app.listen();为了从云文件夹连接到公共文件夹

//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();

【讨论】:

以上是关于无法弄清楚 Parse Hosting - 云代码集成的主要内容,如果未能解决你的问题,请参考以下文章

在 Parse.Cloud 代码中调用 Parse.Query 时无法找到对象

我无法弄清楚我的代码有啥问题

Parse.com煎茶触控2.0

无法弄清楚 MS Access 的此更新查询代码有啥问题

我似乎无法弄清楚 quick.db

parse.com 云代码无法通过 mandrillapp 发送电子邮件