koa-mounting

2.0.4 • Public • Published

koa-mounting

Build Status Coverage Status npm Github Releases

Mount other Koa applications as middleware. The path passed to mount() is stripped from the URL temporarily until the stack unwinds. This is useful for creating entire apps or middleware that will function correctly regardless of which path segment(s) they should operate on.

Installation

$ npm install koa-mounting

Examples

View the ./examples directory for working examples.

Mounting Applications

Entire applications mounted at specific paths. For example you could mount a blog application at "/blog", with a router that matches paths such as "GET /", "GET /posts", and will behave properly for "GET /blog/posts" etc when mounted.

const mount = require('koa-mounting');
const Koa = require('koa');
 
// hello
 
const a = new Koa();
 
a.use((ctx, next) => {
  return next().then(() => {
    ctx.body = 'Hello';
  });
});
 
// world
 
const b = new Koa();
 
a.use((ctx, next) => {
  return next().then(() => {
    ctx.body = 'World';
  });
});
 
 
// app
 
const app = new Koa();
 
app.use(mount('/hello', a));
app.use(mount('/world', b));
 
app.listen(3000);
console.log('listening on port 3000');

Try the following requests:

$ GET /
Not Found

$ GET /hello
Hello

$ GET /world
World

Mounting Middleware

Mount middleware at specific paths, allowing them to operate independently of the prefix, as they're not aware of it.

const mount = require('koa-mounting');
const Koa = require('koa');
 
function hello(ctx, next){
  return next().then(() => {
    ctx.body = 'Hello';
  });
}
 
function world(ctx, next){
  return next().then(() => {
    ctx.body = 'World';
  });
}
 
const app = new Koa();
 
app.use(mount('/hello', hello));
app.use(mount('/world', world));
 
app.listen(3000);
console.log('listening on port 3000');

Optional Paths

The path argument is optional, defaulting to "/":

app.use(mount(a));
app.use(mount(b));

Debugging

Use the DEBUG environement variable to whitelist koa-mount debug output:

$ DEBUG=koa-mounting node myapp.js &
$ GET /foo/bar/baz

  koa-mount enter /foo/bar/baz -> /bar/baz +2s
  koa-mount enter /bar/baz -> /baz +0ms
  koa-mount enter /baz -> / +0ms
  koa-mount leave /baz -> / +1ms
  koa-mount leave /bar/baz -> /baz +0ms
  koa-mount leave /foo/bar/baz -> /bar/baz +0ms

License

MIT

Dependents (1)

Package Sidebar

Install

npm i koa-mounting

Weekly Downloads

1

Version

2.0.4

License

MIT

Last publish

Collaborators

  • tree.xie