Home

Awesome

koa-resource-router

Build Status Dependency Status NPM version

RESTful resource routing for koa.

Installation

Install using npm:

npm install koa-resource-router

API

new Resource(path, actions, options)

var Resource = require('koa-resource-router');
var app = require('koa')();

var users = new Resource('users', {
  // GET /users
  index: function *(next) {
  },
  // GET /users/new
  new: function *(next) {
  },
  // POST /users
  create: function *(next) {
  },
  // GET /users/:id
  show: function *(next) {
  },
  // GET /users/:id/edit
  edit: function *(next) {
  },
  // PUT /users/:id
  update: function *(next) {
  },
  // DELETE /users/:id
  destroy: function *(next) {
  }
});

app.use(users.middleware());

Action mapping

Actions are then mapped accordingly:

GET     /users             ->  index
GET     /users/new         ->  new
POST    /users             ->  create
GET     /users/:user       ->  show
GET     /users/:user/edit  ->  edit
PUT     /users/:user       ->  update
DELETE  /users/:user       ->  destroy

Overriding action mapping

var users = new Resource('users', actions, {
  methods: {
    update: 'PATCH'
  }
});

Top-level resource

Omit the resource name to specify a top-level resource:

var root = new Resource(require('./frontpage'));

Top-level controller actions are mapped as follows:

GET     /          ->  index
GET     /new       ->  new
POST    /          ->  create
GET     /:id       ->  show
GET     /:id/edit  ->  edit
PUT     /:id       ->  update
DELETE  /:id       ->  destroy

Nesting

Resources can be nested using resource.add():

var forums = new Resource('forums', require('./forum'));
var threads = new Resource('threads', require('./threads'));

forums.add(threads);

Multiple middleware

Run middleware before resource actions by passing middleware functions before your actions:

var users = new Resource('users', authorize, actions);

Run middleware for specific actions by passing an array:

var users = new Resource('users', {
  show: [authorize, function *(next) {
    // ...
  }]
});

MIT Licensed