我目前正在为我正在创建的这个网站创建一个管理面板,所以我能够通过Braintree接受付款,但我需要实现检索客户交易的能力,但是一旦发送了标题,它就会发送一个他们而不是整件事。是否可以将json组合成一个数组,以便它将在一个标题中发送?
代码:
router.get('/:cid/test', function(req, res) {
var stream = gateway.transaction.search(function (search) {
search.customerId().is(req.params.cid);
}, function (err, response) {
response.each(function (err, transaction) {
return res.render('admin/test', {transaction: transaction});
});
});
});
这完全遵循Braintree文档,我确切地知道错误发生的原因。任何帮助都非常感谢,我很难解释所以如果你需要了解更多信息,请给我一个大声喊叫!
更新:所以,我想我会探索另一种方法,并且我注意到了#39;响应'给出一系列ID。因此,我将使用EJS循环遍历所有这些,然后为每个事务创建一个单独的页面。
答案 0 :(得分:1)
每条路线只能渲染一个响应。所以你只能调用一次而不是循环:
res.render('admin/test', {transaction: transaction}); });
您可以使用每种方法迭代响应并构建结果:
var transactions =[];
response.each(function (err, transaction) { transactions.push(transaction) });
return res.render('admin/test', {transaction: transactions});
如果每个方法都是同步的,那将会有效。如果不是(尼克会知道),请使用下面的解决方案。
答案 1 :(得分:1)
免责声明:我为Braintree工作:)
正如罗伯特所说,每次请求只能调用res.render
(或end
请求的任何响应方法)(因此来自快递的错误)。
很遗憾,您无法将response
视为数组,因此您需要使用
与search responses
交互的两种记录方式之一。我个人更喜欢溪流方法,因为它更清晰:
app.get('/stream', function (req, res) {
var transactions = []
var transactionStream = gateway.transaction.search(function (search) {
search.customerId().is(req.params.cid);
})
transactionStream.on('data', function (transaction) {
transactions.push(transaction)
})
transactionStream.on('error', function () { /* handle errors */ })
transactionStream.on('end', function () {
res.json({transactions: transactions});
})
})
或者,您可以使用ids
的{{1}}属性来比较您从response
构建的事务数组,以了解何时结束请求:
each