hello-resource-router
is build upon the popular koa-router package
and extended to include resource routing (much like Rails' router) which map to standard CRUD operations.
Install via yarn or npm:
yarn add hello-resource-router
or
npm install hello-resource-router --save
Usage for hello-resource-router
is exactly the same as the usage for koa-router,
with an added method called resources
.
By default, hello-resource-router
maps a resource
to the default 7 methods on a controller:
index
new
show
create
edit
update
(via PUT and PATCH)destroy
The router attempts to be smart by checking if those methods exist. If any of them do not exist,
an HTTP status of 501 Not Implemented
will be returned to the client.
const Router = require('hello-resource-router')
let router = new Router()
router.resrouces('users', controller)
This creates the following routes:
Route | Controller Method |
---|---|
GET /users |
index |
GET /users/new |
new |
GET /users/:id |
show |
POST /users |
create |
GET /users/:id/edit |
edit |
PUT /users/:id |
update |
PATCH /users/:id |
update |
DELETE /users/:id |
destroy |
router.resources(path, [middleware], controller, [options])
path
{String} - The base path for the routermiddleware
{Array of functions} - Optional List of middleware.controller
{Controller} - The controller containing the CRUD methodsopts
{Object} - Optionalexcept
{Array|String} - Optional. An action or list of actions to exclude from the resource routing. Note:only
takes precendence overexcept
only
{Array|String} - Optional. A action or list of actions to include in the resource routing. Note:only
takes precendence overexcept
param
{String} - Optional. The parameter name to use, by default it isid
(accessed byctx.params.id
)api
{Boolean} - Optional. If set to true, this will generate API-only routes, excludingnew
andedit
. [Default: false]
let router = new Router()
router.resources('users', controller.Users)
// GET /users
// GET /users/new
// GET /users/:id
// GET /users/:id/edit
// POST /users
// PUT /users/:id
// PATCH /users/:id
// DELETE /users/:id
let router = new Router()
router.resources('users', controller.Users, { only: ['index', 'show'] })
// GET /users
// GET /users/:id
let router = new Router()
router.resources('users', controller.Users, { only: 'show' })
// GET /users/:id
let router = new Router()
router.resources('users', controller.Users, { except: ['index', 'show', 'new', 'edit'] })
// POST /users
// PUT /users/:id
// PATCH /users/:id
// DELETE /users/:id
let router = new Router()
router.resources('users', controller.Users, { except: 'destroy' })
// GET /users
// GET /users/new
// GET /users/:id
// GET /users/:id/edit
// POST /users
// PUT /users/:id
// PATCH /users/:id
let router = new Router()
router.resources('users', controller.Users, { api: true })
// GET /users
// GET /users/:id
// POST /users
// PUT /users/:id
// PATCH /users/:id
// DELETE /users/:id
// NOTE: This call is the same as:
router.resources('users', controller.Users, { except: ['new', 'edit'] })