2016-12-31 63 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'方法的對象(這是令人困惑的,是的:) –

相關問題