0.0.3 • Published 10 years ago
injective-mvc v0.0.3
InjectiveMVC
.NET inspired simple MVC express middleware with injective.
Install
$ npm install injective-mvcSimple Usage
var express = require('express');
var mvc = require('injective-mvc');
var app = express();
app.use(mvc()); // Then use as middlewareProject 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.jsController
// 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
basePathoptions 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 directoriescontrollerPath{String} (default: basePath + '/contollers'): directory that hold controller filesviewPath{String} (default: basePath + '/views'): directory that hold view filesareaPath{String} (default: basePath + '/areas'): directory that hold areasviewEngine{String} (default: 'jade'): view enginedefaultDocument{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())
basePathcontrollerPathviewPathviewEnginedefaultDocument
mvc.registerAllAreas(options, callback)
Scan areas directory and register all areas
app.use(mvc.registerAllAreas());Return
Express Application
Options (see mvc())
basePathareaPathparams