我正在使用Express来构建一个Web应用程序.我想合并,缩小和提供.js文件.我写了一个中间件,这是我的代码:
var fs = require('fs'), path = require('path'), uglify = require('uglify-js'), cache = '', scriptsDir = path.join(__dirname, '../scripts'), files = fs.readdirSync(scriptsDir); // Sync read is not a problem since the following code is executed on startup files.forEach(function(fname) { if (/^.*\.js$/.test(fname)) { cache += fs.readFileSync(path.join(scriptsDir, fname), 'utf8').toString(); } }); cache = uglify.minify(cache, { fromString: true }).code; module.exports = function(req, res, next) { if (req.url === '/js/all.js') res.end(cache); else next(); };
中间件以这种方式使用:
app.use(compress()); [...] app.use(app.router); app.use(jsMerger); // Here is my middleware app.use(express.static(path.join(__dirname, '../public')));
问题是响应不是gzip压缩.此外,响应中有"无标题"(我的意思是,没有缓存标头,没有标签; static
中间件提供的其他资源都有这些标头).这是回应:
X-Powered-By: Express Transfer-Encoding: chunked Date: Wed, 12 Mar 2014 14:04:19 GMT Connection: keep-alive
我错过了什么吗?如何压缩响应?