Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

hello-resource-router

1.2.0 • Public • Published

hello-resource-router

Version Dependency Status Build Status Coverage Status Standard - JavaScript Style Guide Downloads

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.

Installation

Install via yarn or npm:

yarn add hello-resource-router

or

npm install hello-resource-router --save

Usage

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.

Default behavior:

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

API

router.resources(path, [middleware], controller, [options])

  • path {String} - The base path for the router
  • middleware {Array of functions} - Optional List of middleware.
  • controller {Controller} - The controller containing the CRUD methods
  • opts {Object} - Optional
    • except {Array|String} - Optional. An action or list of actions to exclude from the resource routing. Note: only takes precendence over except
    • only {Array|String} - Optional. A action or list of actions to include in the resource routing. Note: only takes precendence over except
    • param {String} - Optional. The parameter name to use, by default it is id (accessed by ctx.params.id)
    • api {Boolean} - Optional. If set to true, this will generate API-only routes, excluding new and edit. [Default: false]

Examples

Example 1:

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

Example 2:

let router = new Router()
router.resources('users', controller.Users, { only: ['index', 'show'] })
// GET /users
// GET /users/:id

Example 3:

let router = new Router()
router.resources('users', controller.Users, { only: 'show' })
// GET /users/:id

Example 4:

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

Example 5:

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

Example 6:

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'] })

Keywords

none

Install

npm i hello-resource-router

DownloadsWeekly Downloads

4

Version

1.2.0

License

MIT

Last publish

Collaborators

  • avatar