insert-html-content

1.0.2 • Public • Published

insert-html-content

npm version Build Status codecov

Insert contents into an HTML of a response body

const {createServer} = require('http');
const fetch = require('node-fetch');
const insertHtmlContent = require('insert-html-content');
 
createServer((req, res) => {
  insertHtmlContent(res, 'Hello ');
 
  res.setHeader('content-type', 'text/html');
  res.end('<html><body>World</body></html>');
}).listen(3000, async () => {
  await (await fetch('http://localhost:3000')).text(); //=> '<html><body>Hello, World</body></html>'
});

Installation

Use npm.

npm install insert-html-content

API

const insertHtmlContent = require('insert-html-content');

insertHtmlContent(response, content [, options])

response: http.ServerResponse
content: string
options: Object

If the media type of the response is text/html, it inserts a given content into the response body as the first child of <body> tag once, with increasing the value of content-length header if necessary.

const {createServer} = require('http');
const fetch = require('node-fetch');
const injectBody = require('insert-html-content');
 
const html = Buffer.from('<html><body><h2>Hi</h2></body></html>');
const inserted = '<h1>🏄‍</h1>';
 
createServer((req, res) => {
  insertHtmlContent(res, inserted);
 
  res.setHeader('content-type', 'text/html');
  res.setHeader('content-length', 37/* html.length */);
  res.end(html);
}).listen(3000, async () => {
  const response = await fetch('http://localhost:3000');
 
  Number(response.headers.get('content-length'));
  //=> 53, html.length + Buffer.byteLength(inserted)
 
  await response.text(); //=> '<html><body><h1>🏄‍</h1><h2>Hi</h2></body></html>'
});

If the media type is not text/html, or the response body has no <body> tag, it does nothing.

options.tagName

Type: string
Default: 'body'

Change the insertion target to the given tag.

createServer((req, res) => {
  insertHtmlContent(res, '<script src="inserted.js"></script>', {
    tagName: 'head'
  });
 
  res.setHeader('content-type', 'text/html');
  res.end('<html><head></head></html>');
}).listen(3000, async () => {
  await (await fetch('http://localhost:3000')).text(); //=> '<html><head><script src="inserted.js"></script></head></html>'
});

options.insertToEnd

Type: boolean
Default: false

When this option is true, it inserts a content to the last child of the target tag instead.

Default:

<body><div>existing content</div><div>inserted content</div></body>

insertToEnd: true:

<body><div>inserted content</div><div>existing content</div></body>

class insertHtmlContent.InsertHtmlContent(contents [, options])

content: string
options: Object
Return: Function

Create a new insertHtmlContent function with the fixed content and options. Use this class if a server will insert the same contents into every HTML response many times.

const {InsertHtmlContent} = require('insert-html-content');
 
const injectStyle = new InsertHtmlContent('<style>body {color: red}</style>');

License

ISC License © 2018 - 2019 Shinnosuke Watanabe

Package Sidebar

Install

npm i insert-html-content

Weekly Downloads

0

Version

1.0.2

License

ISC

Unpacked Size

19.5 kB

Total Files

4

Last publish

Collaborators

  • shinnn