Skip to content
forked from koajs/mount

Mount other Koa applications or middleware to a given pathname

Notifications You must be signed in to change notification settings

antoinegomez/mount

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

koa-mount

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-mount

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.

var mount = require('koa-mount');
var koa = require('koa');

// hello

var a = koa();

a.use(function *(next){
  yield next;
  this.body = 'Hello';
});

// world

var b = koa();

b.use(function *(next){
  yield next;
  this.body = 'World';
});

// app

var app = 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.

var mount = require('koa-mount');
var koa = require('koa');

function *hello(next){
  yield next;
  this.body = 'Hello';
}

function *world(next){
  yield next;
  this.body = 'World';
}

var app = koa();

app.use(mount('/hello', hello));
app.use(mount('/world', world));

app.listen(3000);
console.log('listening on port 3000');

You can also mount multiple middlewares if needed. It can be useful when you want to have an endpoint secured with the same app instance.

var mount = require('koa-mount');
var koa = require('koa');

function *isAuthed(next){
  // apply logic here
}

function *hello(next){
  yield next;
  this.body = 'Hello';
}

function *world(next){
  yield next;
  this.body = '*Secured* World';
}

var app = new koa();

app.use(mount('/hello', hello));
app.use(mount('/secured', [isAuthed, 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-mount 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

About

Mount other Koa applications or middleware to a given pathname

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%