【问题标题】:Node stream get write after end error节点流在结束错误后写入
【发布时间】:2017-05-14 20:25:48
【问题描述】:

我正在测试上传和下载文件的流,下面是我真正简单的文件下载路径,它解压缩我的压缩文件并通过流发送:

app.get('/file', (req, res) => {   
   fs.createReadStream('./upload/compress_aurelien-boquet.pdf')
      .pipe(unzip)
      .pipe(res); 
});

我正在使用 express 4.15.2 btw。

当我尝试这条路线时,它第一次运行良好,并在我的浏览器上显示 pdf,但如果我刷新页面,我的服务器会收到此错误:

events.js:163
      throw er; // Unhandled 'error' event
      ^

Error: write after end
    at writeAfterEnd (_stream_writable.js:191:12)
    at Unzip.Writable.write (_stream_writable.js:238:5)
    at ReadStream.ondata (_stream_readable.js:557:20)
    at emitOne (events.js:96:13)
    at ReadStream.emit (events.js:191:7)
    at readableAddChunk (_stream_readable.js:178:18)
    at ReadStream.Readable.push (_stream_readable.js:136:10)
    at onread (fs.js:1938:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:629:17)

我想知道发生了什么?

【问题讨论】:

    标签: javascript node.js express stream gzip


    【解决方案1】:

    我的错误是使用 zlib 库来 gzip 和解压缩文件,但我忘记了“zlib.createGzip”和“zlib.createUnzip”返回一个流,所以我重用了一个已经结束的流,导致我出现“结束后写入错误” .

    我做的坏事:

    const unzip = zlib.createUnzip();
    
    app.get('/file', (req, res) => {   
       fs.createReadStream('./upload/compress_aurelien-boquet.pdf')
          .pipe(unzip)
          .pipe(res); 
    });
    

    要做的好事:

    app.get('/file', (req, res) => {
    
       fs.createReadStream('./upload/compress_aurelien-boquet.pdf')
          .pipe(zlib.createGunzip())
          .pipe(res);
    
    });
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2017-01-08
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      相关资源
      最近更新 更多