Skip to content

bendrucker/http-app-router

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Dec 10, 2016
240a835 · Dec 10, 2016

History

91 Commits
Dec 10, 2016
Jul 5, 2016
Jul 5, 2016
Jul 5, 2016
Jul 6, 2016
Jul 13, 2016
Jul 13, 2016
Dec 10, 2016
Nov 29, 2016
Jul 5, 2016
Dec 10, 2016
Dec 10, 2016
Dec 10, 2016
Nov 8, 2016
Nov 8, 2016
Jul 5, 2016
Jul 8, 2016
Nov 29, 2016

Repository files navigation

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