Skip to content
/ ovenware Public

Automatic Model / Controller Loader for Node(express.js)

License

Notifications You must be signed in to change notification settings

zedgu/ovenware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ovenware

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

Automatic Model / Controller Loader for Node(express.js)

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

Install

npm install ovenware --save

Simple Usage

####Require...

var ovenware = require('ovenware');

####Config...

ovenware(app);

####Controller file Default path of controllers: ./lib/controllers/

in index.js:

exports.index = function(req, res) {
  res.send('hello express');
};

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

ovenware(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
 */
req.model([modelName])
exports.model([modelName])

for exmample:

exports.get = function(req, res) {
  req.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
 */
req.ctrl([ctrlName])
exports.ctrl([ctrlName])

for exmample:

exports.get = function(req, res) {
  req.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
  extname: 'js|coffee', // defult extname of the files to load
  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

About

Automatic Model / Controller Loader for Node(express.js)

Resources

License

Stars

Watchers

Forks

Packages

No packages published