我正在使用Exceljs快速创建Excel数据

我想将此内容缓冲在内存中,然后使用Koa将其发送给用户。

Exceljs的write方法需要一个writableStream:
workbook.xlsx.write(writableStream, options)
但是Koa期望可读的流:
response.body = readableStream
我知道我可以将可读流传输到可写流中,但是我该如何做相反呢?我希望Exceljs写入可写流,并让Koa从同一流中读取。我对流API感到非常沮丧!

在其他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

但这是行不通的,我收到一些关于无法写入已关闭流的奇怪错误。但是,即使我处理了该错误,我的Excel文件也不会打开。

那么如何从可写流中生成可读流呢?

最佳答案

您需要一个转换流。它既可读又可写。

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

关于node.js - 如何从可写流制作可读流? (Node.js),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35564182/

10-13 07:58