Disposable HTTP Server

Create a disposable HTTP server.

Usage

var httpServer = require( '@stdlib/tools/disposable-http-server' );

httpServer( options[, clbk] )

Creates a disposable HTTP server; i.e., the server closes immediately after serving provided content.

var opts = {
    'html': '<script src="/bundle.js"></script>',
    'javascript': 'console.log( "Boop" );'
};

httpServer( opts );

The function accepts the following options:

  • html: buffer or string to serve as HTML content.
  • javascript: buffer or string to serve as JavaScript.
  • port: server port. Default: 0 (i.e., randomly assigned).
  • maxport: max server port (used when port hunting). Default: =port.
  • hostname: server hostname.
  • address: server address. Default: "0.0.0.0".
  • open: boolean indicating whether to launch a web browser. Default: false.

To serve HTML content, set the html option. Once the content is requested, the server will close.

var opts = {
    'html': '<h1>Beep</h1>'
};

httpServer( opts );

To serve JavaScript, set the javascript option. If no HTML is provided, an HTML boilerplate is served and the JavaScript is served as /bundle.js. Once the content is requested, the server will close.

var opts = {
    'javascript': 'console.log( "Boop" );'
};

httpServer( opts );

If HTML and JavaScript are provided, in order for the JavaScript to be served, the HTML content should request the file /bundle.js.

var opts = {
    'html': '<script src="/bundle.js"></script>',
    'javascript': 'console.log( "Boop" );'
};

httpServer( opts );

To obtain the server handle, provide a callback.

function onReady( error, server ) {
    if ( error ) {
        throw error;
    }
    process.nextTick( close );
    function close() {
        server.close();
    }
}

var opts = {
    'html': html,
    'javascript': 'console.log( "Boop" );'
};

httpServer( opts, onReady );

Notes

  • If neither the html or javascript option is set, the server serves an HTML boilerplate and then closes.

Examples

var join = require( 'path' ).join;
var readFileSync = require( '@stdlib/fs/read-file' ).sync;
var httpServer = require( '@stdlib/tools/disposable-http-server' );

var html = join( __dirname, 'examples', 'fixtures', 'index.html' );
var js = join( __dirname, 'examples', 'fixtures', 'script.js' );

var opts = {
    'html': readFileSync( html ),
    'javascript': readFileSync( js ),
    'port': 7331,
    'hostname': 'localhost',
    'open': false
};

httpServer( opts, clbk );

function clbk( error, server ) {
    if ( error ) {
        throw error;
    }
    // Give the user a few seconds to open her web browser before closing the server...
    setTimeout( onTimeout, 5000 );

    function onTimeout() {
        server.close();
    }
}

CLI

Usage

Usage: temphttpserver [options] (--html path | --javascript path | --stdin type)

Options:

  -h,    --help                Print this message.
  -V,    --version             Print the package version.
         --html path           Serve HTML.
  --js,  --javascript path     Serve JavaScript.
         --stdin type          Type of content: html or javascript.
  -p,    --port port           Server port. Default: 0.
         --maxport maxport     Max server port. Default: `port`.
         --hostname hostname   Server hostname.
         --address address     Server address. Default: 0.0.0.0.
         --open                Launch a browser once server is ready.

The application recognizes the following environment variables:

  • DEBUG: enable verbose logging.
  • PORT: server port.
  • MAXPORT: max server port.
  • HOSTNAME: server hostname.
  • ADDRESS: server address.

Notes

  • Command-line arguments always take precedence over environment variables.
  • If either the --html or --javascript command-line flag is set, stdin is assumed to be of the other type. Accordingly, the --stdin flag may be omitted.

Examples

To serve an HTML file,

$ DEBUG=* temphttpserver --html ./examples/fixtures/index.html
...

To serve a JavaScript file (and a default HTML boilerplate),

$ DEBUG=* temphttpserver --javascript ./examples/fixtures/script.js
...

In addition to file input, the application accepts standard input. To pipe HTML,

$ cat ./examples/fixtures/index.html | DEBUG=* temphttpserver --port 7331 --stdin html
...

To pipe HTML and load a JavaScript file,

$ cat ./examples/fixtures/index.html | DEBUG=* temphttpserver --port 7331 --javascript ./examples/fixtures/script.js
...

To pipe JavaScript (and serve a default HTML boilerplate),

$ cat ./examples/fixtures/script.js | DEBUG=* temphttpserver --address '127.0.0.1' --stdin javascript
...

To pipe JavaScript and serve custom HTML content which requests a /bundle.js file,

$ cat ./examples/fixtures/script.js | DEBUG=* temphttpserver --html ./examples/fixtures/index.html
...