Skip to content

Commit 0e53f28

Browse files
committed
Export the default filter function for wrapping
closes #24
1 parent 2d3599a commit 0e53f28

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

HISTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
unreleased
22
==========
33

4+
* Export the default `filter` function for wrapping
45
* deps: accepts@~1.2.2
56
- deps: mime-types@~2.0.7
67

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,25 @@ The byte threshold for the response body size before compression is considered
5252
for the response, defaults to `1kb`. This is a number of bytes, any string
5353
accepted by the [bytes](https://www.npmjs.com/package/bytes) module, or `false`.
5454

55+
#### .filter
56+
57+
The default `filter` function. This is used to construct a custom filter
58+
function that is an extension of the default function.
59+
60+
```js
61+
app.use(compression({filter: shouldCompress}))
62+
63+
function shouldCompress(req, res) {
64+
if (req.headers['x-no-compression']) {
65+
// don't compress responses with this request header
66+
return false
67+
}
68+
69+
// fallback to standard filter function
70+
return compression.filter(req, res)
71+
}
72+
```
73+
5574
### res.flush
5675

5776
This module adds a `res.flush()` method to force the partially-compressed

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var zlib = require('zlib')
2525
*/
2626

2727
module.exports = compression
28+
module.exports.filter = shouldCompress
2829

2930
/**
3031
* Compress response data with gzip / deflate.

test/compression.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,44 @@ describe('compression()', function(){
394394
})
395395
})
396396

397+
describe('.filter', function () {
398+
it('should be a function', function () {
399+
assert.equal(typeof compression.filter, 'function')
400+
})
401+
402+
it('should return false on empty response', function (done) {
403+
var server = http.createServer(function (req, res) {
404+
res.end(String(compression.filter(req, res)))
405+
})
406+
407+
request(server)
408+
.get('/')
409+
.expect(200, 'false', done)
410+
})
411+
412+
it('should return true for "text/plain"', function (done) {
413+
var server = http.createServer(function (req, res) {
414+
res.setHeader('Content-Type', 'text/plain')
415+
res.end(String(compression.filter(req, res)))
416+
})
417+
418+
request(server)
419+
.get('/')
420+
.expect(200, 'true', done)
421+
})
422+
423+
it('should return false for "application/x-bogus"', function (done) {
424+
var server = http.createServer(function (req, res) {
425+
res.setHeader('Content-Type', 'application/x-bogus')
426+
res.end(String(compression.filter(req, res)))
427+
})
428+
429+
request(server)
430+
.get('/')
431+
.expect(200, 'false', done)
432+
})
433+
})
434+
397435
describe('res.flush()', function () {
398436
it('should always be present', function (done) {
399437
var server = createServer(null, function (req, res) {

0 commit comments

Comments
 (0)