What is koa-mount?
The `koa-mount` package is a middleware for the Koa framework that allows you to mount other Koa applications or middleware at specific paths. This is useful for structuring your application into smaller, more manageable pieces or for integrating third-party applications.
What are koa-mount's main functionalities?
Mounting a Koa application at a specific path
This feature allows you to mount a sub-application at a specific path. In this example, requests to `/sub` will be handled by `subApp`.
const Koa = require('koa');
const mount = require('koa-mount');
const app = new Koa();
const subApp = new Koa();
subApp.use(async (ctx) => {
ctx.body = 'Hello from subApp!';
});
app.use(mount('/sub', subApp));
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
Mounting middleware at a specific path
This feature allows you to mount specific middleware at a given path. In this example, requests to `/middleware` will be handled by the `middleware` function.
const Koa = require('koa');
const mount = require('koa-mount');
const app = new Koa();
const middleware = async (ctx, next) => {
ctx.body = 'Hello from middleware!';
await next();
};
app.use(mount('/middleware', middleware));
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
Other packages similar to koa-mount
koa-router
The `koa-router` package provides a powerful routing solution for Koa applications. It allows you to define routes and their handlers, including support for nested routes and middleware. Unlike `koa-mount`, which is focused on mounting entire applications or middleware at specific paths, `koa-router` is more focused on defining and handling individual routes.
express
While not a Koa-specific package, `express` is a popular web framework for Node.js that includes built-in support for routing and middleware. It offers similar functionality to `koa-mount` in terms of mounting sub-applications and middleware, but it is designed for use with the Express framework rather than Koa.
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.
const mount = require('koa-mount');
const Koa = require('koa');
const a = new Koa();
a.use(async function (ctx, next){
await next();
ctx.body = 'Hello';
});
const b = new Koa();
b.use(async function (ctx, next){
await next();
ctx.body = 'World';
});
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-mount');
const Koa = require('koa');
async function hello(ctx, next){
await next();
ctx.body = 'Hello';
}
async function world(ctx, next){
await next();
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-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