naive-mvc
v0.1.0
Published
Simple MVC middleware for express
Downloads
3
Readme
NaiveMVC
Simple MVC middleware for express. Inspired by .NET MVC framework.
Install
$ npm install naive-mvc
Simple Usage
var express = require('express');
var naivemvc = require('naive-mvc')(express);
var app = express();
app.use(naivemvc()); // 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 = function(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 = function(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 naivemvc = require('naive-mvc');
module.exports = function(router) {
router.use('/api/v1', naivemvc({basePath: __dirname}); // You must supply basePath here
};
// areas/api_v1/controllers/values.js
module.exports = function(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
naivemvc([options], [callback])
Shorthand method for calling naivemvc.registerAllControllers
and naivemvc.registerAllAreas
together.
app.use(naivemvc());
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 fileparams
{Array}: Parameters that passed to every controllers
A note on using * params *
If you specific params in options, they are passed to every controller
Examples
// app.js
var db = require('db');
app.use(naivemvc({
params: [db]
}));
// controllers/account.js
module.exports = function(router, db) {
// GET /account/id
router.post('/:id', function(req, res, next) {
db.users.findOne({_id: req.param.id}, function(err, user){
if (user) {
res.render('user', {user: user});
} else {
res.render('not_found');
}
});
});
};
naivemvc.registerAllControllers([options], [callback])
Scan controllers
directory and register all controllers
app.use(naivemvc.registerAllControllers());
Return
Express.Router
Options (see naivemvc()
)
basePath
controllerPath
viewPath
viewEngine
defaultDocument
params
naivemvc.registerAllAreas([options], [callback])
Scan areas
directory and register all areas
app.use(naivemvc.registerAllAreas());
Return
Express Application
Options (see naivemvc()
)
basePath
areaPath
params