0.3.0 • Published 3 years ago

reigner v0.3.0

Weekly downloads
6
License
ISC
Repository
github
Last release
3 years ago

Reigner

Reigner (Recursive Express Router Signer) is a tool to automaticly sign router based on its directory structure

installation

$ npm i reigner

simple usage

const reigner = require('reigner');
const path = require('path');

// this is wrapper for express.js
const app = reigner();

app.routers('/', path.join(__dirname, './routes'));

app.listen(3000);

with that script, all router in directory "routes" will be automatically signed

example, if we add these files

  • routes/index.js
  • routes/chicken.js
  • routes/hello/index.js
  • routes/hello/test.js

the script now will equivalent with this

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

const app = express();

app.use('/', require('./routes/index'));
app.use('/chicken', require('./routes/chicken'));
app.use('/hello', require('./hello/index'));
app.use('/hello/test', require('./hello/test'))

app.listen(3000);

router maker

a simple tool if you think you are creating the same kind of routers repeatedly and the differences is only the resource (e.g. rest api)

const reigner = require('reigner');

const davidModel      = {name: 'David'};
const reynoldModel    = {name: 'Reynold'};

const davidRouter = createRouter(davidModel);
const reynoldRouter = createRouter(reynoldModel);

const createRouter = reigner.routerMaker(function(router, resource) {
  router.get('/', function(req, res, next) {
    res.send(resource.name);
  });
  router.get('/:change', function(req, res, next) {
    resource.name = req.params.change;
    res.send(resource.name);
  });
});

that code will be equivalent with this

const express = require('express');

const davidRouter = express.Router();
const reynoldRouter = express.Router();

const davidModel      = { name: 'David' };
const reynoldModel    = { name: 'Reynold' };

davidRouter.get('/', function(req, res, next) {
  res.send(davidModel.name);
});

davidRouter.get('/:change', function(req, res, next) {
  davidModel.name = req.params.change;
  res.send(davidModel.name);
});

reynoldRouter.get('/', function(req, res, next) {
  res.send(reynoldModel.name);
});

reynoldRouter.get('/:change', function(req, res, next) {
  reynoldModel.name = req.params.change;
  res.send(reynoldModel.name);
});

automatic resource routing

const reigner = require('reigner');
const path = require('path');

const app = reigner();

const createRouter = reigner.routerMaker(function(router, resource) {
  router.get('/', function(req, res, next) {
    res.send(resource.name);
  });
  router.get('/:change', function(req, res, next) {
    resource.name = req.params.change;
    res.send(resource.name);
  });
});

app.resources('/', path.join(__dirname, './models'), createRouter);

app.listen(3000);

with that script, all resource in directory "models" will have it's own router based on the routermaker

example, if we add these files

  • models/david.js
  • models/reynold.js

now the script is equivalent with these

const express = require('express');

const app = express();

const davidResource = require('./models/david');
const reynoldResource = require('./models/reynold');

const davidRouter = express.Router();
const reynoldRouter = express.Router();

davidRouter.get('/', function(req, res, next) {
  res.send(davidResource.name);
});

davidRouter.get('/:change', function(req, res, next) {
  davidResource.name = req.params.change;
  res.send(davidResource.name);
});

reynoldRouter.get('/', function(req, res, next) {
  res.send(reynoldResource.name);
});

reynoldRouter.get('/:change', function(req, res, next) {
  reynoldResource.name = req.params.change;
  res.send(reynoldResource.name);
});

app.use('/david', davidRouter);
app.use('/reynold', reynoldRouter);

app.listen(3000);
0.3.0

3 years ago

0.2.0

5 years ago

0.1.1

5 years ago