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:
indexnewshowcreateeditupdate(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:onlytakes precendence overexceptonly{Array|String} - Optional. A action or list of actions to include in the resource routing. Note:onlytakes precendence overexceptparam{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, excludingnewandedit. [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/:idlet router = new Router()
router.resources('users', controller.Users, { only: ['index', 'show'] })
// GET /users
// GET /users/:idlet router = new Router()
router.resources('users', controller.Users, { only: 'show' })
// GET /users/:idlet router = new Router()
router.resources('users', controller.Users, { except: ['index', 'show', 'new', 'edit'] })
// POST /users
// PUT /users/:id
// PATCH /users/:id
// DELETE /users/:idlet 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/:idlet 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'] })