Javascript 当目标流发出错误事件时,我们能否以某种方式重用源流?
我正在尝试实现以下错误处理:Javascript 当目标流发出错误事件时,我们能否以某种方式重用源流?,javascript,node.js,stream,Javascript,Node.js,Stream,我正在尝试实现以下错误处理: 假设我们有一个可读的流 我们将其导入一个转换流 不知何故,转换流发出一个错误 我们希望恢复可读的流(及其所有数据),并将其重新导入另一个转换流 第4步似乎很困难:我可以监听目标流(转换流)上的取消管道事件,并检索对源流(可读流)的引用,但至少它的一些数据块已丢失 我们可以在不创建自定义转换流的情况下执行此操作吗? 一个真实的例子是缩写< /代码>内容编码,你需要 ZLIB .CudioActudiAuthAuth[Audio](代码)>而不是 ZLIB。CueRea
可读的流
转换流
转换
流发出一个错误
可读的
流(及其所有数据),并将其重新导入另一个转换
流转换
流)上的取消管道
事件,并检索对源流(可读
流)的引用,但至少它的一些数据块已丢失
我们可以在不创建自定义转换流的情况下执行此操作吗?
一个真实的例子是<代码>缩写< /代码>内容编码,你需要<代码> ZLIB .CudioActudiAuthAuth[Audio](代码)>而不是<代码> ZLIB。CueRealAudio()/代码>,但是我们不能决定在查看响应体缓冲区之前哪一个是正确的选择。
< P>你不需要在中间引入一个流来读取第一个字节。例如:(function readChunk() {
var chunk = res.read();
if (!chunk)
return res.once('readable', readChunk);
var inflate;
if ((chunk[0] & 0x0F) === 0x08)
inflate = zlib.createInflate();
else
inflate = zlib.createInflateRaw();
// Put chunk back into stream
res.unshift(chunk);
// Prepare the decompression
res.pipe(inflate);
output = new Response(inflate, response_options);
resolve(output);
})();
另外,
var body=res.pipe(new stream.PassThrough())
是不必要的,您可以在适当的地方使用res
。现在大多数网站都不支持gzip吗?只要在您的请求中发送Accept Encoding:gzip
,您就不必担心任何deflate问题。@mscdex您是对的,但是对于http库,我们不能忽略那些旧的和疯狂的deflate-only服务器,我最终做到了这一点,这似乎是目前我能做的最好的事情。