如何创建一个使用 gzip 压缩静态文件的简单节点服务器

2024-03-03

我已经在这几个小时了..

我做的第一件事就是跟随this http://blog.modulus.io/nodejs-and-express-static-content教程有这个代码:

var express = require('express');
var app = express();

// New call to compress content
app.use(express.compress());    
app.use(express.static(__dirname + '/public'));
app.listen(3333);

自然,代码已经过时了..并且我得到了这个错误:

Error: Most middleware (like compress) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.

所以我将代码更新为:

var express = require('express');
var app = express();
var compression = require('compression')

app.use(compression());
app.use(express.static(__dirname + '/_public' ));    

app.listen(3333);

效果很好..但我没有看到压缩的证据(我怎么知道?通过查看 chrome 开发工具响应标头:

它没有 gzipcontent-encoding标题如教程中的标题:

所以尝试使用zlib http://nodejs.org/api/zlib.html图书馆代替:

var express = require('express');
var app     = express();
var maxAge  = 31557600000;
var zlib = require('zlib');
app.use(express.static(__dirname + '/_public' ));

app.get('/*', function(req,res)
{
  res.sendFile(__dirname + '/_public/index.html').pipe(zlib.createGunzip()).pipe(output);
});

app.listen(3333);

但这也没有成功..此时我几乎秃顶了..有什么帮助吗?

附注压缩docs https://www.npmjs.org/package/compression假设您可以提供 zlib 选项,但无法提供任何示例/解释。


update:这个问题已经得到充分回答并标记为这样(我讨厌移动目标问题)..但我忍不住问:那么你如何验证你的原始有效负载因 gzip 压缩而被修剪了多少?由于压缩/解压缩自然发生在幕后,因此 chrome 开发工具将在其网络选项卡中报告文件的原始大小:


zlib.createGunzip() 用于解压。

我认为使用标头和流是有效的。

app.get('/', function(req,res){
  res.writeHead(200, {
  'Content-Encoding': 'gzip' });
 fs.createReadStream('_public/index.html').pipe(zlib.createGzip()).pipe(res);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建一个使用 gzip 压缩静态文件的简单节点服务器 的相关文章

随机推荐