node.js - Express.js 压缩模块不工作

标签 node.js express compression gzip

我正在尝试在我的 Express 应用程序中对静态文件进行 gzip 压缩,以减少脚本的大小。我尝试使用express'“压缩”模块,但它不会压缩任何东西。

我在网上寻找有同样问题的人,但我发现的所有答案只是将 app.use(compression()) 放在所有路由之上并将压缩的大小阈值设置为零,我做了这两件事,但我仍然一无所获。

相关代码如下:

var express = require("express");
var fs = require('fs');
var xml2js = require("xml2js");
var auth = require("./authenticator.js");
var bodyParser = require('body-parser');
var _ = require('lodash');
var compression = require('compression')

var app=express();

app.use(compression({threshold : 0}));

var jsonParser = bodyParser.json();

var urlencodedParser = bodyParser.urlencoded({
    extended: true
}); 

app.get('/', function(req, res){
    res.header('X-UA-Compatible', 'IE=Edge');
    res.setHeader("Cache-Control", "public, max-age=604800, must-revalidate");
    sendFile(res, 'index.html', 'text/html');
});

app.get('/testGZIP', function(req, res){
    res.setHeader('Content-Type', 'application/json');
    res.setHeader("Cache-Control", "public, max-age=604800, must-revalidate");
    var msg = JSON.stringify({'text':_.times(5000, _.uniqueId())});
    res.write(msg);
    res.end();
});

app.use(function(req, res, next) {
    var urls = ['modules/', 'font/', 'js/', 'css/', 'views/', 'img/'];
    if(_.some(urls, (el) => _.includes(req.url, el))) {
        console.log("g-zipping request " + req.url + "...");
        res.setHeader("Cache-Control", "public, max-age=604800, must-revalidate");
    }
    return next();
});
app.use('/font/', express.static('./font/'));
app.use('/modules/', express.static('./node_modules/'));
app.use('/css/', express.static('./css/'));
app.use('/views/', express.static('./views/'));
app.use('/img/', express.static('./img/'));
app.use('/js/', express.static('./js/'));

var server = app.listen(8010, function(){
   var host = server.address().address;
   var port = server.address().port;

   console.log("\nServer started on ip " + host + ' on port ' +port + " - " + (new Date()).getHours() + ":" + (new Date()).getMinutes() + "\n");
});

以下是/testGZIP 的 header :(任何其他静态资源都会返回相同的结果)

enter image description here

内容当然没有被压缩。

我做错了什么?

<小时/>

编辑:

我尝试使用 zlib 而不是 gzip 来执行此操作,但也没有压缩:

app.get('/testZlib', function(req,res){
    res.writeHead(200, {
    'Content-Encoding': 'gzip' });
    fs.createReadStream('js/client-main.min.js').pipe(zlib.createGzip()).pipe(res);
});

最佳答案

我认为您需要在您的情况下设置内容编码才能使其正常工作。

例如:- res.set('Content-Encoding', 'gzip');

关于node.js - Express.js 压缩模块不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434322/

相关文章:

javascript - 无法摆脱 ForbiddenError : invalid csrf token on express with csurf

api - 什么是好的面向压缩的应用程序编程接口(interface) (API)?

javascript - 有没有办法通过代码将一个长字符串压缩成一个较小的字符串,反之亦然?

compression - 调查 squashfs 压缩率

css - 为什么 gulp 不创建 css 目标文件夹?

javascript - Pug 有条件包含文件路径的所有子目录

javascript - 这个原始查询的等效 sequelize 查询是什么?

node.js - 错误development is not Defined错误与react-hot-loader v3和webpack-hot-middleware

javascript - Angular 5 无法 PUT 并出现 401 错误

javascript - req.session 在 Node 中未定义?