http请求静态文件返回使用gzip压缩时候报错,不开启gzip使用注释部分则正常
关键代码片段:
const gzip = require('zlib').createGzip();
res.statusCode = 200;
res.setHeader('Content-Type', type);
res.setHeader('Content-Encoding', 'gzip');
// fs.readFile(pathname, (err, data) => {
// res.end(data);
// })
fs.createReadStream(pathname).pipe(gzip).pipe(res); //关键语句
报错:
Error: write after end
at writeAfterEnd (_stream_writable.js:195:12)
at Gzip.Writable.write (_stream_writable.js:242:5)
at ReadStream.ondata (_stream_readable.js:555:20)
at emitOne (events.js:96:13)
at ReadStream.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at ReadStream.Readable.push (_stream_readable.js:134:10)
at onread (fs.js:2026:12)
at FSReqWrap.wrapper [as oncomplete] (fs.js:683:17)
较小的html文件能正确返回,比较大css和js却返回不了,请问下我这是哪里写错了或是少了什么吗?
你应该在每次接收到请求的时候, 新创建一个 gzip 对象, 而不是在一开始的时候就创建。
另外, 推荐使用现成的库, 比如compression。