koa-ovenware

0.5.0 • Public • Published

Koa-Ovenware

NPM version build status Test coverage NPM Monthly Downloads Dependencies License Tips

Automatic Model / Controller Loader for Koa

  • Write a controller and get all route pattern you want.
  • Compatible with other middlewares including view renders.

Install

npm install koa-ovenware --save

Simple Usage

Require...

var kow = require('koa-ovenware');

Config...

kow(app);

Controller file

Default path of controllers: ./lib/controllers/

in index.js:

exports.index = function *() {
  this.body = 'hello koa';
};

Checkout the examples.

Conventions

Action Mapping

route           http method    function of ctrl
:resource       get            index
:resource       post           create
:resource/:id   get            get
:resource/:id   put            update
:resource/:id   del            del

All routes can be customized by setting, see Default values; and also can be changed by controller api singly, see APIs - Routes.

Resource

Resource name will be the file name of the controller, if there is no alias set for the controller, see APIs - Alias.

APIs

Options

kow(app[, options])

options see Default values

Controller APIs

Alias

Set alias for the controller.

exports.alias = 'name_you_want';
Routes

Set routes for the controller.

exports.routes = {
  entry: {
    method: 'get',
    path: '/index'
  }
};
Model

Get model object.

/**
 * get model object by given controller file name
 *
 * @param   {String}   modelName   optional, undefined for the model has
 *                                 the the same name as this controller
 * @return  {Object}               model object
 */
this.model([modelName])
exports.model([modelName])

for exmample:

exports.get = function *() {
  this.model('abc');
};
// or
exports.todo = function() {
  this.model(); // this === exports
};
Ctrl

Get controller object.

/**
 * get ctrl object by given controller file name
 *
 * @param   {String}   ctrlName   optional, undefined for self
 * @return  {Object}              ctrl object
 */
this.ctrl([ctrlName])
exports.ctrl([ctrlName])

for exmample:

exports.get = function *() {
  this.ctrl(); // => return this exports
};
// or
exports.todo = function() {
  exports.ctrl('abc');
};

Global configuration

Default values

{
  root: './lib',        // root dir
  ctrl: 'controllers',  // controllers dir
  model: 'models'       // model dir
  format: 'json',       // format by default
  prefix: '/',          // String or RegExp
  aliases: {
    'index': ''
  },
  routes: {
    'index': {
      method: 'get',
      path: ''
    },
    'create': {
      method: 'post',
      path: ''
    },
    'get': {
      method: 'get',
      path: '/:id'
    },
    'update': {
      method: 'put',
      path: '/:id'
    },
    'del': {
      method: 'del',
      path: '/:id'
    }
  }
}

License

MIT

Package Sidebar

Install

npm i koa-ovenware

Weekly Downloads

26

Version

0.5.0

License

MIT

Last publish

Collaborators

  • zedgu