es-controller

Controller framework for Nodejs supporting es6


Keywords
nodejs, es6, ecmascript 6, controller, typescript, router
License
GPL-3.0
Install
npm install es-controller@2.0.9

Documentation

es-controller

Controller framework for Nodejs supporting ecmascript-6. No more hassling with code in your route. es-controller automatically set up routing based on your controllers. Typescript definition is also present for strict mode.

Contributors

Nitin Bansal https://github.com/nitinbansal1989

Installation

$ npm install es-controller

Usage

Just add the routes to router object and add the handler to the express module.

const es = require("es-controller");

//Your express-app
var app = express();

/*
    Add a route to 'es-controller' Router.
*/
var router = es.router;
router.add("Default", "/{controller}/{action}/{id}", __dirname + "/Controller", defaults, false);

// Add es-controller handler to express
app.use(es.handler);

Route

A Route should be added to router. It should contain a path template for matching. "controller" and "action" keyword are used for matching Class and and function name respectively. Other parameters are added to the req.params object.

A Route has following parameters :-

Parameter Type Description
Name string Name of the router
Route Template string Template path of the router.
Directory Path string Path of the Controller directory
Defaults Map<string, string> Map for specifying the default parameters
includeSubDir boolean Flag for finding the coltroller classes recursively in sub directories

Defaults

Specifies the default request parameters.

var defaults = new Map();
defaults.set("controller", "Home");
defaults.set("action", "index");
defaults.set("id", "1");

Controllers & Paths

The paths will be generated by a convention of naming controllers and functions.

A basic example: HomeController.js

"use strict";
const es = require("es-controller");
/*
    Will set Controller Name as "Home"
*/
class Home extends es.Controller {
    /*
        Will be translated to get("/Home/index") (HTTP-method is extracted by first item in function name)
    */
    get_index() {
        return this.view({
            title: "Title",
            message: "Hello"
        });
    }
    
    /*
        Will be translated to ("/Home/index") for all methods.
        Note: specified method request will have greater priority
    */
    index() {
        this.res.send("Returning Index request for all methods");
    }
    
    /*
        Will be translated to get("/Home") when no action is found.
        Note: specified method with action request will have greater priority
    */
    get() {
        return {
            title: "Title",
            message: "Hello"
        };
    }
    
    /*
        Will be translated to post("/Home") when no action is found.
        Note: specified method with action request will have greater priority
    */
    post() {
        this.res.send("Post Response has been created");
    }
}
exports.Home = Home;

Load from File

Routes can also be loaded from a json file. Use the load method of the router to specify the path to the configuration file.

var router = es.router;
router.load(__dirname + "/config.json", __dirname);

config.json

Specify one Object or an Array of Object. For directory path, you can use "__dirname" global variable as "{dirname}" template in config file.

{
    "name": "Default",
    "template": "/{controller}/{action}",
    "dir": "{dirname}/Controller",
    "includeSubDir": false,
    "defaults": {
        "controller": "Home",
        "action": null
    }
}

Please provide suggestions if any.