36 lines
1007 B
JavaScript
36 lines
1007 B
JavaScript
/**
|
|
* Response Compression Middleware
|
|
* Compresses API responses to reduce payload size
|
|
*/
|
|
const compression = require("compression");
|
|
|
|
const compressionMiddleware = compression({
|
|
// Only compress responses larger than 1kb
|
|
threshold: 1024,
|
|
// Compression level (0-9, higher = better compression but slower)
|
|
level: 6,
|
|
// Filter function - don't compress already compressed formats
|
|
filter: (req, res) => {
|
|
if (req.headers["x-no-compression"]) {
|
|
return false;
|
|
}
|
|
// Check content-type
|
|
const contentType = res.getHeader("Content-Type");
|
|
if (!contentType) return compression.filter(req, res);
|
|
|
|
// Don't compress images, videos, or already compressed formats
|
|
if (
|
|
contentType.includes("image/") ||
|
|
contentType.includes("video/") ||
|
|
contentType.includes("application/zip") ||
|
|
contentType.includes("application/pdf")
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
return compression.filter(req, res);
|
|
},
|
|
});
|
|
|
|
module.exports = compressionMiddleware;
|