2016-12-31 100 views
2

我目前正在为本网站的管理面板工作,因此我可以通过Braintree接受付款,但我需要实现检索客户的功能交易,但一旦发送一个标题,它只发送其中的一个,而不是整个事情。是否有可能将json结合到一个数组,以便它将发送一个头?错误:发送后无法设置标题Braintree

CODE:

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

这完全是继布伦特里文档和我确切地知道为何出现错误。任何帮助真的很感激,我很难解释,所以如果你需要知道更多的信息,请给我一个霍勒!

更新:所以,我想我会探索另一种方法,我注意到'响应'给出了一个ID数组。所以我只是使用EJS循环遍历所有这些,然后为每个事务分配一个单独的页面。

+0

如果它可以转换为一个数组,我肯定可以用EJS循环它。 – Ethan

+0

布兰特里人在这里呆过,最后一次我看到,但他们上次使用电子邮件的技术支持非常好。你应该尝试一下。他们的文档太糟糕了,因为你已经发现了。 – Rob

+0

他们确实有很好的电子邮件支持,但不幸的是,他们已经关闭了新的一年,是的,这是可怕的大声笑。 – Ethan

回答

1

声明:我布伦特里工作:)

正如罗伯特指出,你只能叫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}); 
    }) 
}) 

或者,你可以使用responseids属性,你从each打造知道交易阵列比较何时结束请求:

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}); 
     } 
    }) 
    }) 
}) 
+0

谢谢尼克! – Ethan

1

每个路由只能呈现一个响应。所以,你只能在一次循环,而不是把这个:

res.render('admin/test', {transaction: transaction}); }); 

您可以使用各种方法通过响应迭代,并建立一个结果:

var transactions =[]; 
response.each(function (err, transaction) { transactions.push(transaction) }); 
return res.render('admin/test', {transaction: transactions}); 

那会,如果每个工作方法是同步的。如果不是(并且Nick会知道),请使用下面的解决方案。

+0

不幸的是,'response'不是一个数组,它是一个带'each'方法的对象(这是令人困惑的,是的:) –

相关问题