injective-mvc
v0.0.3
Published
.NET inspired simple MVC express middleware with injective
Downloads
1
Maintainers
Readme
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 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()
)
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