express 下怎么解决预 gzip 压缩的文件乱码问题

574 阅读1分钟

问题

express 下设置静态文件,我们一般使用 app.use(express.static('dist'))

可是如果当 dist 目录下文件,预先被我们 gzip 压缩后呢?

当我们访问网页的时候,发现,都是乱码???

怎么解决

方法一

手动设置 Content-Encoding

这个消息首部用来告知客户端应该怎样解码才能获取在 Content-Type 中标示的媒体类型内容

例如下例子,dist 目录下除了 jsongif 文件,其他都被预先 gzip 压缩过,所以添加了 Content-Encoding: gzip,用于告知客户端,这个是被 gzip 压缩过的,请用 gzip 解析

app.use(express.static('dist', {
    setHeaders: function(res, path) {
        // 如果不加这一行的话,json、gif 由于没有被 gzip 压缩过,反应到客户端,这两种文件反而会乱码了
        if(!path.endsWith('json') && !path.endsWith('gif')) {   
            // 设置返回头
            res.set("Content-Encoding", "gzip");
        }else{}
    }
}));