Routerů pro Koa.js je k dispozici mnoho. Většinu z nich ale nikdo nepoužívá. Při bližším zkoumání přicházejí v úvahu pouze routery dva:

https://github.com/koajs/router
GitHub: 954x Used by, 271 stars, poslední změna kódu před šesti dny. Zazipovaná velikost kódu: 20.6 kB. Založení projektu červen 2019. Aktuálně nejoblíbenější router pro Koa.js. Jde o pokračování původního koa-router, který byl neaktivní. Tento projekt též hledá správce.
// Příklad základního použití const Koa = require('koa'); const Router = require('@koa/router'); const app = new Koa(); const router = new Router(); router.get('/', (ctx, next) => { // ctx.router available }); app .use(router.routes()) .use(router.allowedMethods()); //--------------------------------------- // get, post, put, del, all router .get('/', (ctx, next) => { ctx.body = 'Hello World!'; }) .post('/users', (ctx, next) => { // ... }) .put('/users/:id', (ctx, next) => { // ... }) .del('/users/:id', (ctx, next) => { // ... }) .all('/users/:id', (ctx, next) => { // ... }); //------------------------------------------ // Pojmenované trasy router.get('user', '/users/:id', (ctx, next) => { // ... }); router.url('user', 3); // => "/users/3" //------------------------------------------ // multiple midleware router.get( '/users/:id', (ctx, next) => { return User.findOne(ctx.params.id).then(function(user) { ctx.user = user; next(); }); }, ctx => { console.log(ctx.user); // => { id: 17, name: "Alex" } } ); //-------------------------------------------- // zahnízděné/vnoření směřovače router.get( '/users/:id', (ctx, next) => { return User.findOne(ctx.params.id).then(function(user) { ctx.user = user; next(); }); }, ctx => { console.log(ctx.user); // => { id: 17, name: "Alex" } } ); //--------------------------------------------- // prefixy const router = new Router({ prefix: '/users' }); router.get('/', ...); // responds to "/users" router.get('/:id', ...); // responds to "/users/:id" //--------------------------------------------- // URL parametry router.get('/:category/:title', (ctx, next) => { console.log(ctx.params); // => { category: 'programming', title: 'how-to-node' } }); //--------------------------------------------- // middleware // session middleware will run before authorize router .use(session()) .use(authorize()); // use middleware only with given path router.use('/users', userAuth()); // or with an array of paths router.use(['/users', '/admin'], userAuth()); app.use(router.routes()); //-------------------------------------------- // Přesměrování router.redirect('/login', 'sign-in'); // This is equivalent to: router.all('/login', ctx => { ctx.redirect('/sign-in'); ctx.status = 301; }); //--------------------------------------------- // generování URL router.get('user', '/users/:id', (ctx, next) => { // ... }); router.url('user', 3); // => "/users/3" router.url('user', { id: 3 }); // => "/users/3" router.use((ctx, next) => { // redirect to named route ctx.redirect(ctx.router.url('sign-in')); }) router.url('user', { id: 3 }, { query: { limit: 1 } }); // => "/users/3?limit=1" router.url('user', { id: 3 }, { query: "limit=1" }); // => "/users/3?limit=1" //------------------------------------------- // spustit middleware pro pojmenované trasy // vhodné např. pro ověřování router .param('user', (id, ctx, next) => { ctx.user = users[id]; if (!ctx.user) return ctx.status = 404; return next(); }) .get('/users/:user', ctx => { ctx.body = ctx.user; }) .get('/users/:user/friends', ctx => { return ctx.user.getFriends().then(function(friends) { ctx.body = friends; }); }) // /users/3 => {"id": 3, "name": "Alex"} // /users/3/friends => [{"id": 4, "name": "TJ"}] //--------------------------------------------------- // generování URL z částečné trasy const url = Router.url('/users/:id', {id: 1}); // => "/users/1"
https://github.com/koajs/route
GitHub: 7300x Used by, 431 stars, poslední změna kódu před více jak rokem. Zazipovaná velikost kódu: 4 kB. Založení projektu prosinec 2013.
// Příklad použití const _ = require('koa-route'); const Koa = require('koa'); const app = new Koa(); const db = { tobi: { name: 'tobi', species: 'ferret' }, loki: { name: 'loki', species: 'ferret' }, jane: { name: 'jane', species: 'ferret' } }; const pets = { list: (ctx) => { const names = Object.keys(db); ctx.body = 'pets: ' + names.join(', '); }, show: (ctx, name) => { const pet = db[name]; if (!pet) return ctx.throw('cannot find that pet', 404); ctx.body = pet.name + ' is a ' + pet.species; } }; app.use(_.get('/pets', pets.list)); app.use(_.get('/pets/:name', pets.show)); app.listen(3000); console.log('listening on port 3000');