1.1.1 • Published 8 years ago

express-centric-router v1.1.1

Weekly downloads
2
License
ISC
Repository
github
Last release
8 years ago

express-centric-router

Basics

This is a router made of the express 4.x router. As its name says, it provides the possiblity to map several routes using one router, with the possibility of having nested routes. Unlike express router, this one takes care of mapping paths to middleware with the right method, using an array of routes' configurations.

'use strict';

let router = require('express-centric-router')();

router.add([
    {
        'url' : '/foo',
        'method' : 'get',
        'action' : (req, res) => {
          res.status(200)
              .json( { message : 'hello' });
    },
    {
        url : '/bar',
        'method' : 'put',
        'action' : (req, res) => {
            res.status(400)
                .json( { error : 'bad !'});
    },
    {
        url : '/bar',
        'method' : 'delete',
        'action' : (req, res) => {
            res.json({ message : 'boo'});
        }
    }
]);

It can be used by the express 4.x app, using the expressify method, just like the express built-in router:

'use strict';

const app = require('express')();

app.use('/api', router.expressify());

If you don't specify a method, but provided an action, it will use the method get as default method.

Beside the method and the action options, you can specify a middleware or an array of middleware to apply before the actual action to perform or after.

router.add([
    {
        'url' : '/foo',
        'method' : 'get',
        'action' : (req, res) => {
            res.status(200)
              .json( { message : 'hello ' + user });
        },
        'before' : (req, res, next) => {
          req.user = 'foo';
          next();
        },
        'after' : [
          (req, res, next) => {
              next(new Error('never occur')); // because controller doesnt call next
          },
          (req, res) => {
              console.log('neither this');
          }
        ]
    }
]);

You can nest routes using the use method:

'use struct';
const parentrouter = require('./parentrouter');
const childrouter = require('./childrouter');

parentrouter.use('/child', chidlrouter);

You can apply a middleware to a router:

function middleware(req, res, next){
    // some logic ..
}

router.use(middleware);

Good practice

When creating an application using this router, split your routes configuration into difference files, and import them in the main routing file, like so:

-- routes/security.route.js

'use strict';

module.exports = [
    {
        url : '/signin',
        'method' : 'post',
        'action' : (req, res) => {
            // some logic
        }
    },
    {
        'url' : '/signin',
        'method' : 'post',
        'action' : (req, res) => {
            // some logic
        }
    }
]

-- routes/users.route.js

'use strict';

module.exports = [
    {
        action : '/secured',
        'method' : 'post',
        'action' : (req, res) => {
            // some logic
        },
        'before' : authenticate // middleware for authentication for example
    }
];

-- routes.js

'use strict';

let router = require('express-centric-router')();

const securityRoutes = require('./routes/security.route');
const usersRoutes = require('./routes/users.route');

router.add(securityRoutes);
router.add(usersRoutes);

-- app.js

const app = require('express')();
const router = require('./routes');

// config your app ...

app.use('/api', router.expressify());
1.1.1

8 years ago

1.1.0

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago