我正在尝试为事务构建一个api路由,我想从braintree服务器获取事务的详细信息。
我的应用程序设置为使脑树customerId()
与应用程序用户的ID相同。因此,下面我搜索特定用户登录的所有交易
意味着req.user.id
将始终等于位于脑树服务器上的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: [] }
这返回了事务数据。我将继续研究节点流,并愿意做得更好,但到目前为止,它至少会返回数据。
stream.on("data", function (data) {
res.json(data);
});
这给了我一个错误,尽管Error: Can't set headers after they are sent.
我认为stream.pipe(res)应该可以工作。
您收到"发送后无法设置标头"错误的原因是,流的"数据"事件已发出多次,因此您试图为同一请求多次调用res.json。