express-routes-registrar

register express app routes dynamically from controllers and routes json files

Usage no npm install needed!

<script type="module">
  import expressRoutesRegistrar from 'https://cdn.skypack.dev/express-routes-registrar';
</script>

README

express-routes-registrar

build:? npm npm npm

Description

Adds an MVC structure to a node express app by separating routes into json files and handlers into controllers. Routes are defined as json files that hold the methods and handler names of each route while Handlers are defined in controllers.

Install

npm install express-routes-registrar

Usage

Defining the app routes into json files

/routes/homeRoutes.json

{
  "/": {
    "GET": "index"
  }
}

/routes/usersRoutes.json

{
  "/users": {
    "GET": "getAll",
    "POST": "add"
  },
  "/users/:id": {
    "GET": "get",
    "PUT": "update",
    "DELETE": "remove"
  }
}

Exporting routes module

/routes/index.js

module.exports = {
  homeRoutes : require('./homeRoutes'),
  usersRoutes: require('./usersRoutes')
}

Defining handlers into controllers

/controllers/homeController.js

class HomeController {
  index() {
    // handle / for GET
  }
}

module.exports = HomeController;

/controllers/usersController.js

class UsersController {
  getAll(req, res) {
    // handle /users GET
  }

  add(req, res) {
    // handle /users POST
  }

  get(req, res) {
    // handle /users/:id GET
  }

  update(req, res) {
    // handle /users/:id PUT
  }

  remove(req, res) {
    // handle /users/:id DELETE
  }
}

module.exports = UsersController;

Exporting controllers module

/controllers/index.js

// create an instance of each controller
// can include any factory logic to create controllers

const HomeController  = require('./controllers/homeController');
const UsersController = require('./controllers/usersController');

module.exports = {
  homeController : new HomeController(),
  usersController: new UsersController()
}

create the registrar

creates a routes registrar object

const routes = require('./routes');
const controllers = require('./controllers');
const app = require('express')();
const routesRegistrar = require('express-routes-registrar')(app);

.register(routes, controllers)

registers all routes and controllers

routesRegistrar.register(routes, controllers);

.registerRoutesJson(routesJson, controller)

registers a routes file and its controller

routesRegistrar.registerRoutesJson(routes.homeRoutes, controller.homeController);

.registerRouteMethods(route, methods, controller)

registers a route's methods and their controller

const methods = routes.usersRoutes['/users'];
routesRegistrar.registerRouteMethods(
  '/users',
  methods,
  controller.usersController
);

.registerRoute(route, method, handler)

register a route method and its handler

routesRegistrar.registerRoute('/users/:id', 'GET', (req, res) => {
  // handle /users/:id GET
});

Build

grunt build

License

The MIT License. Full License is here