I have a nodejs server, and I would like to gzip the html.
I try to used [this post][1] has David suggested to gzip html.
But I don't see the html being gziped in chrome, and on top of that, it crash Error: ENOENT: no such file or directory, open './public/js/vendor/plyr.min.js.map'
我有一个nodejs服务器,我想对html进行gzip。我试着用[这篇文章][1]有大卫建议用gzip html。但我没有看到html在chrome中被gzip化,最重要的是,它崩溃了错误:ENOENT:没有这样的文件或目录,打开'/public/js/vender/ply.min.js.map'
Plyr was working fine without before.
普利尔工作得很好。
var http = require('http');
var fs = require('fs');
var path = require('path');
var url = require('url');
var port = process.env.PORT || 1881;
http.createServer(function (request, response) {
var filePath = '.' + request.url;
if (filePath == './')
filePath = './public/index.html';
var extname = path.extname(filePath);
var contentType = 'text/html';
var raw = fs.createReadStream(filePath);
var acceptEncoding = request.headers['accept-encoding'];
if (!acceptEncoding) {
acceptEncoding = '';
}
// Note: this is not a conformant accept-encoding parser.
// See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3
if (acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, { 'content-encoding': 'deflate' });
raw.pipe(zlib.createDeflate()).pipe(response);
} else if (acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, { 'content-encoding': 'gzip' });
raw.pipe(zlib.createGzip()).pipe(response);
} else {
response.writeHead(200, {});
raw.pipe(response);
}
fs.readFile(filePath, function(error, content) {
if (error) {
if(error.code == 'ENOENT'){
fs.readFile('./404.html', function(error, content) {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
});
}
else {
response.writeHead(500);
response.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
response.end();
}
}
else {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
}).listen(port);
console.log("Server Running on "+port+".\nLaunch http://localhost:"+port);
[1]: https://stackoverflow.com/questions/3894794/node-js-gzip-compression
更多回答
Could, be, so I updated my file, but now, I don't see me html gziped in chrome inspector, and it keep crashing with : Error: ENOENT: no such file or directory, open './public/js/vendor/plyr.min.js.map'. I never had the use of this file before.
可能是,所以我更新了我的文件,但现在,我在chrome检查器中看不到我的html gzip,它不断崩溃:错误:ENOENT:没有这样的文件或目录,打开'/public/js/vvendor/plyr.min.js.map'。我以前从未使用过这个文件。
优秀答案推荐
Ok, so i was stupid again yesterday :)
I should have put the compressing part in the fs.readFile function.
It works now.
好吧,所以我昨天又傻了:)我应该把压缩部分放在fs.readFile函数中。它现在起作用了。
using compression
middleware:
使用压缩中间件:
var compression = require('compression')
var express = require('express')
var app = express()
app.use(compression({ filter: shouldCompress }))
function shouldCompress (req, res) {
if (req.headers['x-no-compression']) {
// don't compress responses with this request header
return false
}
// fallback to standard filter function
return compression.filter(req, res)
}
https://github.com/expressjs/compression
https://github.com/expressjs/compression
更多回答
我是一名优秀的程序员,十分优秀!