Overview
Compress responses with gzip/brotli. Reduces bandwidth and improves load times.
Features
- Gzip compression
- Brotli support
- Threshold configuration
- Content-type filtering
Installation
npx hanma add compression
Dependencies
compression
Code
import compression from 'compression';
import { Request, Response, RequestHandler } from 'express';
/**
* Default compression middleware
* Compresses responses larger than 1KB using gzip
*/
export const compress: RequestHandler = compression({
// Only compress responses larger than 1KB
threshold: 1024,
// Compression level (1-9, higher = more compression but slower)
level: 6,
// Filter function to decide what to compress
filter: (req: Request, res: Response) => {
// Don't compress if client doesn't accept it
if (req.headers['x-no-compression']) {
return false;
}
// Use compression's default filter (checks Accept-Encoding)
return compression.filter(req, res);
},
});
/**
* Aggressive compression for bandwidth-critical applications
* Higher compression level, lower threshold
*/
export const compressAggressive: RequestHandler = compression({
threshold: 512,
level: 9,
filter: (req: Request, res: Response) => {
if (req.headers['x-no-compression']) {
return false;
}
return compression.filter(req, res);
},
});
/**
* Light compression for CPU-constrained servers
* Lower compression level, higher threshold
*/
export const compressLight: RequestHandler = compression({
threshold: 2048,
level: 1,
filter: (req: Request, res: Response) => {
if (req.headers['x-no-compression']) {
return false;
}
return compression.filter(req, res);
},
});
/**
* Skip compression for specific content types
* Useful when serving already-compressed content (images, videos)
*/
export const compressSelectiveTypes: RequestHandler = compression({
threshold: 1024,
level: 6,
filter: (req: Request, res: Response) => {
const contentType = res.getHeader('Content-Type') as string;
// Skip already-compressed formats
const skipTypes = [
'image/',
'video/',
'audio/',
'application/zip',
'application/gzip',
'application/x-rar',
];
if (contentType && skipTypes.some(type => contentType.includes(type))) {
return false;
}
if (req.headers['x-no-compression']) {
return false;
}
return compression.filter(req, res);
},
});
Usage
import { compressionMiddleware } from './middleware/utils/compression';
app.use(compressionMiddleware);
Dependencies
compression
Frequently Asked Questions
How do I install Compression?
Run the following command:
npx hanma add compressionWhat dependencies are required?
This snippet requires: compression. Make sure to install them before using the snippet.
How do I use this snippet?
Copy the code and paste it into your project. The snippet will be saved to
middleware/utils/compression.ts.Can I customize this snippet?
Yes! All snippets are copy-paste code that you own. Feel free to modify them to fit your needs.
Does this work with other frameworks?
This snippet is designed for the specific framework. Check the other framework pages for equivalent implementations.