Expressjs - 将流cassandra结果集设置为客户端

时间:2017-02-14 10:47:09

标签: node.js express cassandra stream

我必须将cassandra返回的json结果集流传输到浏览器。我使用express-stream工作,但是涉及对每一行进行字符串化并将其传递给res.pipe()

我想知道为什么以下没有工作:

app.get('/api/v1/streamevents', function (req, res) {
   let cstream = client.stream(selectQuery, ['339aa84a-4bba-411f-a4fb-38167a987cd2'],options)
   cstream.pipe(res)

})

我收到以下错误:

TypeError: First argument must be a string or Buffer
    at ServerResponse.write (_http_outgoing.js:458:11)
    at ResultStream.ondata (_stream_readable.js:555:20)
    at emitOne (events.js:96:13)
    at ResultStream.emit (events.js:188:7)
    at ResultStream.Readable.read (_stream_readable.js:381:10)

1 个答案:

答案 0 :(得分:2)

根据stream对于Cassandra驱动程序的ServerResponse.write方法:

  

返回objectMode

中的可读Streams2对象

同时,基础String在发送到客户端时仅接受BufferObject作为数据块,而不是Transform

这就是为什么它在每一行被字符串化时都有效。

您必须在中间使用{{1}}流将所选单元格值转换为字符串。