我正在尝试为事务构建api路由,我想从braintree服务器获取事务详细信息。
我的应用已设置好,因此braintree customerId()
与我的应用用户ID相同。所以下面我搜索登录的特定用户的所有交易。
含义req.user.id
总是等于位于braintree服务器上的customerId()
。
app.get('/project', function(req, res) {
if(req.user) {
// Finds all transactions for a particular customer
var stream = gateway.transaction.search(function (search) {
search.customerId().is(req.user.id);
});
console.log(stream);
//res.send(stream);
}
});
我想返回详细信息,但流如下所示。所以很明显这让我觉得有一种处理节点流的方法吗?
我见过像readable-stream
这样的东西,我不确定这是否是处理这个流对象所需要的。
我的问题是如何处理流对象以返回事务的详细信息?
{ _readableState:
{ highWaterMark: 16384,
buffer: [],
length: 0,
pipes: null,
pipesCount: 0,
flowing: false,
ended: false,
endEmitted: false,
reading: false,
calledRead: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
objectMode: true,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: {},
_maxListeners: 10,
searchResponse: { stream: [Circular], success: true },
currentItem: 0,
currentOffset: 0,
bufferedResults: [] }
答案 0 :(得分:1)
这返回了交易数据。我将继续研究节点流,并且愿意让它变得更好,但截至目前它至少会返回数据。
stream.on("data", function (data) {
res.json(data);
});
这给我一个错误Error: Can't set headers after they are sent.
答案 1 :(得分:0)
我认为stream.pipe(res)应该可行。
你得到“无法在发送后设置标头”错误的原因是因为流'data'事件被多次发出,所以你试图多次为同一请求调用res.json