@o3r/dynamic-content
Version:
This module provides a mechanism to retrieve media and data depending on the host or a server specific url.
38 lines • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setup = setup;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- requires NodeNext module resolution
// @ts-ignore
const cheerio = require("cheerio");
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- no type are provided for express-interceptor
// @ts-ignore
const expressInterceptor = require("express-interceptor");
const querystring = require("node:querystring");
let previousPostParams = {};
const middleware = () => expressInterceptor((req, res) => ({
isInterceptable: () => /text\/html/.test(res.get('Content-Type')),
intercept: (body, send) => {
// Burn query and post parameters in a script inside index.html
const file = cheerio.load(body);
file('body').attr('data-query', JSON.stringify(req.query));
file('body').attr('data-post', JSON.stringify(previousPostParams));
// Remove previously stored parameters
previousPostParams = {};
send(file.html());
}
}));
/**
* Set up application
* @param app
*/
function setup(app) {
app.post('*', (req, res) => {
// Retrieve Body Params and convert to map
let data = '';
req.on('data', (chunk) => (data += chunk.toString()));
req.on('end', () => (previousPostParams = querystring.parse(data)));
res.redirect(req.originalUrl);
});
app.use(middleware());
}
//# sourceMappingURL=parameter-extractor-middleware.js.map