http-app-router

3.1.0 • Public • Published

http-app-router Build Status codecov

Request router for building HTTP proxy servers

http-app-router is a Node HTTP router designed for serving multiple HTML applications on the same domain. HTML applications might include:

  • A single page JavaScript web app
  • A CMS-powered blog
  • Static HTML content

If it speaks HTTP and sends HTML, it's an HTML app. Apps are defined with a server host and a list of routes that should match to that app. The router will make a request to your app and stream the response down to the client.

Install

$ npm install --save http-app-router

Usage

Pass an array of apps to the Router contructor to create a router handler. Use that handler to route requests and send a response if an app matches the request. Handlers are req, res, callback functions that you can use with plain http.Server instances or connect/express apps.

The router will always send a response when fetching the app is successful and will never send an error response. That's up to you.

var Router = require('http-app-router')
var http = require('http')
 
var router = Router([
  {
    name: 'github',
    host: 'github.com',
    routes: [
      '/bendrucker'
    ]
  },
  {
    name: 'local',
    host: 'localhost',
    routes: '*'
  }
])
 
var server = http.createServer(function (req, res) {
  router(req, res, function (err) {
    if (err) res.end('oh no, an error!')
  })
})

API

Router(apps) -> function

Returns a router function.

app

Required
Type: array[object]

An array of app objects, containing:

name

Required
Type: string

An application name.

host

Required
Type: string

The application host.

insecure

Type: boolean
Default: false

Toggles the app to be fetched over plain HTTP instead of HTTPS.

prefix

Type: string
Default: ''

A prefix that will be removed from the URL before being passed along.

headers

Type: object

Optional headers to set on requests.

cookies

Type: array[string]

A whitelist of cookie names that can be sent by a client or set by an app.

transforms

Type: array[string]

An array of transform function keys that receive the app as an argument and return a Transform stream. The transform stream will receive and output HTML.

Built in:

Or add custom things, maybe minification or something equally practical:

var transforms = require('http-app-router/transforms')
var through = require('through2')
 
tranforms.uppercase = function (app) {
  return through(function (chunk, enc, callback) {
    callback(null, chunk.toString().toUpperCase())
  })
}

router.onLog(listener) -> function

Listens on log output from the router.

listener

Required
Type: function
Arguments: {level, message}

License

MIT © Ben Drucker

Package Sidebar

Install

npm i http-app-router

Weekly Downloads

8

Version

3.1.0

License

MIT

Last publish

Collaborators

  • bendrucker