Routery pro Koa.js

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:

Porovnání Koa.js routerů - download
Zdroj: npmtrends.com

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');

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*