UNPKG

@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
"use strict"; 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