如何从可写入的stream中创build可读stream? (Node.js的)

我使用Exceljs快速创buildExcel数据

我想在内存中caching这个东西,然后使用Koa发送给用户。

Exceljs的write方法需要一个writableStream:

workbook.xlsx.write(writableStream, options)

但Koa预计可读stream:

response.body = readableStream

我知道我可以把一个可读的stream转换成一个可写的stream,但是我怎么做相反的? 我希望Exceljs写入可写入stream,并从相同的stream读取Koa。 我非常沮丧的streamAPI!

其他20个事情中,我试过这个:

 const ReadableStream = require("memory-streams").ReadableStream const reader = new ReadableStream() const writer = new stream.Writable({ write: function(chunk, encoding, next) { console.log(chunk.toString()) // reader.push(chunk, encoding) next() } }) const reader = new MemoryStream(null, {readable: true}) // reader.write = reader.unshift const writer = reader workbook.xlsx.write(writer, {}) return reader 

但它不起作用,我得到了一些奇怪的错误,关于不能写入一个closures的stream。 即使我处理错误,但是,我的Excel文件不会打开。

那么我怎样才能从一个可写的stream中创build一个可读的stream呢?

你需要一个转换stream。 它是可读可写的。

 stream = new require('stream').Transform() stream._transform = function (chunk,encoding,done) { this.push(chunk) done() }