0.0.3 • Published 9 years ago

injective-mvc v0.0.3

Weekly downloads
2
License
-
Repository
github
Last release
9 years ago

InjectiveMVC

.NET inspired simple MVC express middleware with injective.

Install

$ npm install injective-mvc

Simple Usage

var express = require('express');
var mvc = require('injective-mvc');

var app = express();
app.use(mvc()); // Then use as middleware

Project Structure

Let's assume you have the following project layout

|-- areas
|   |-- api_v1
|   |   |-- controllers
|   |   |   |-- values.js
|   |   |-- index.js
|-- controllers
|   |-- index.js
|   |-- account.js
|-- views
|   |-- index
|   |   |-- index.html
|   |-- account
|   |   |-- login.html
|   |   |-- login_success.html
|-- app.js

Controller

// controllers/index.js

module.exports = exports = index;
module.exports[Symbol.for('injective')] = {
    type: 'factory',
    deps: ['router']
};

function index(router) {
    // GET /
    router.get('/', function(req, res, next) {
        res.render('index', {data: 'Hello World!'}); // no need to specify path of the view file
    });
};
// controllers/account.js

module.exports = exports = account;
module.exports[Symbol.for('injective')] = {
    type: 'factory',
    deps: ['router']
};

function account(router) {
    // GET /account/login
    router.get('/login', function(req, res, next) {
        res.render('login');
    });

    // POST /account/login
    router.post('/login', function(req, res, next) {
        // TODO: Verify login credentials
        res.render('login_success');
    });
};

Area

To register an area, do the following

// areas/api_v1/index.js

var mvc = require('injective-mvc');

module.exports = exports = index;
module.exports[Symbol.for('injective')] = {
    type: 'factory',
    deps: ['router']
};

function index(router) {
    router.use('/api/v1', mvc({basePath: __dirname}); // You must supply basePath here
};
// areas/api_v1/controllers/values.js

module.exports = exports = values;
module.exports[Symbol.for('injective')] = {
    type: 'factory',
    deps: ['router']
};

function values(router) {
    // GET /api/v1/values
    router.get('/', function(req, res, next) {
        res.jsonp(['value1', 'value2']);
    });
};
  • Note: You must supply basePath options when registering an area *

API

mvc(options, callback)

Shorthand method for calling mvc.registerAllControllers and mvc.registerAllAreas together.

app.use(mvc());

Return

Express.Router

Options

  • basePath {String} (default: path.dirname(require.main.filename)): base path for controller, view and area directories
  • controllerPath {String} (default: basePath + '/contollers'): directory that hold controller files
  • viewPath {String} (default: basePath + '/views'): directory that hold view files
  • areaPath {String} (default: basePath + '/areas'): directory that hold areas
  • viewEngine {String} (default: 'jade'): view engine
  • defaultDocument {String} (default: 'index'): default name of index file

mvc.registerAllControllers(options, callback)

Scan controllers directory and register all controllers

app.use(mvc.registerAllControllers());

Return

Express.Router

Options (see mvc())

  • basePath
  • controllerPath
  • viewPath
  • viewEngine
  • defaultDocument

mvc.registerAllAreas(options, callback)

Scan areas directory and register all areas

app.use(mvc.registerAllAreas());

Return

Express Application

Options (see mvc())

  • basePath
  • areaPath
  • params

License

MIT