错误:发送Braintree后无法设置标题
我目前正在为我创build的这个网站的pipe理面板工作,所以我能够通过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文档,我确切知道错误发生的原因。 任何帮助真的很感激,我很难解释所以如果你需要知道更多的信息,请给我一个霍勒!
更新:所以,我想我会探索另一种方法,我注意到'响应'返回一个ID数组。 所以我只是使用EJS循环遍历所有这些,然后为每个事务有一个单独的页面。
免责声明:我为Braintree工作:)
正如Robert指出的那样,每个请求只能调用res.render
(或者任何end
请求的响应方法)(因此表示错误)。
不幸的是,你不能把response
看作一个数组,所以你需要使用两种logging方式之一来与search responses
进行交互。 我个人比较喜欢stream方法,因为它更清晰:
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}); }) })
或者,可以使用response
的ids
属性来比较each
构build的事务数组,以知道何时结束请求:
app.get('/calback', function (req, res) { var transactionStream = gateway.transaction.search(function (search) { search.customerId().is(req.params.cid); }, function (err, response) { var transactions = [] response.each(function (err, transaction) { transactions.push(transaction) if (transactions.length === response.ids.length) { res.json({transactions: transactions}); } }) }) })
每个路由只能呈现一个响应。 所以你只能调用一次而不是循环:
res.render('admin/test', {transaction: transaction}); });
您可以使用每种方法遍历响应并build立一个结果:
var transactions =[]; response.each(function (err, transaction) { transactions.push(transaction) }); return res.render('admin/test', {transaction: transactions});
如果每个方法都是同步的,那么这将起作用。 如果不是的(Nick会知道),请使用下面的解决scheme。