无法弄清楚 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 - 云代码集成的主要内容,如果未能解决你的问题,请参考以下文章