Nodejs流与braintree?

时间:2014-10-24 18:14:11

标签: node.js stream braintree

我正在尝试为事务构建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: [] }

2 个答案:

答案 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