Module that allows you to rewrite HTTP responses from middleware further down the stack, such as static providers, HTTP proxies etc.
This module is the spiritual successor to express-hijackresponse attempting to solve the same goals. The differences from the original module are primarily that the API is slightly different, there's no direct coupling to express and it supports streams2.
It's mostly useful for content filters. The original use case is injecting an inline JavaScript into all HTML responses in LiveStyle. It is also used in a series of transpiler and preprocessing middleware:
- express-compiless
- express-processimage
- express-extractheaders
- express-autoprefixer
- express-jsxtransform
$ npm install hijackresponse
var express = require('express');
var hijackResponse = require('hijackresponse');
var app = express();
app.use(function (req, res, next) {
hijackresponse(res, function (err, res) {
if (err) {
res.unhijack(); // Make the original res object work again
return next(err);
}
// Don't hijack HTML responses:
if (/^text/html(?:;$)/.test(res.getHeader('Content-Type'))) {
return res.unhijack();
}
res.setHeader('X-Hijacked', 'yes!');
res.removeHeader('Content-Length');
res
.pipe(transformStream)
.pipe(res);
});
// next() must be called explicitly, even when hijacking the response:
next();
});
This module is published under the ISC License. See the LICENCE
file for
additional details.