错误:发送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后无法设置标题"

免责声明:我为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}); }) }) 

或者,可以使用responseids属性来比较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。