2013-11-26 69 views
2

我(初学者和)试图服务gzip jpeg与node.js和Express框架。我有/公用文件夹中的图像。我的代码如下所示:快递与node.js不压缩JPEG图像

// require the express module 
var express = require('express'); 
var app = express(); 
app.use(express.logger()); 

//compress static content 
app.use(express.compress()); 

// GET verbs 
app.get('/', function(request, response) { 
    response.send('Hello World!'); 
}); 


// GET /public/* 
app.use(express.static(__dirname + '/public')); 

// Start the app on port 8080 if PORT not set 
var port = process.env.PORT || 8080; 
app.listen(port, function() { 
    console.log("Listening on " + port); 
}); 

我错过了什么吗?在Chrome调试器上,禁用缓存(确保HTTP响应代码为200)时,在响应中找不到内容编码:gzip标头。

任何导致什么我失踪?

+2

文本资源正在工作(gzip'd标题显示在响应中)。此外,为什么我需要gzip'd JPEG是测试一个边缘的情况下,当网页的JPEG文件带有压缩头。 – arunaugustine

+0

如果您希望节省一些带宽,则需要考虑的另一件事是在静态图像上自定义缓存控制标头 –

回答

11

声明:你真的不应该尝试gzip图像。你似乎有一个很好的理由,但我写这为未来的读者:)。

如果你看一看的压缩中间件source code,你会发现这一点:

exports.filter = function(req, res){ 
    return /json|text|javascript|dart|image\/svg\+xml|application\/x-font-ttf|application\/vnd\.ms-opentype|application\/vnd\.ms-fontobject/.test(res.getHeader('Content-Type')); 
}; 

默认情况下,只有文本文件进行压缩。这是合乎逻辑的,因为图像等二进制文件已经被压缩。

幸运的是,你可以通过你自己:

express.compress({ 
    filter: function (req, res) { 
    return true; 
    }) 
}); 

这应该压缩一切。

+0

这很有效并且非常合理!谢谢 :) – arunaugustine