0

I've got a lot of folders as modules that contains my rest api, the structure is the following:

app
|— server
|  |— rest-api
|  |  |— v1
|  |  |  |— module-one
|  |  |  |— module-two
|  |  |  |— module-three
|  |  |  |— module-x
|  |  |  └── index.js
|  |  └──...
|  └──...
|— ...
└── server.js

What I want to avoid at v1/index.js is the following:

module.exports = (function () {

    var express      = require( 'express' ),
        router       = express.Router(),
        module_one   = require( './module-one' ),
        module_two   = require( './module-two' ),
        module_three = require( './module-three' );
    //...

    router.use( module_one );
    router.use( module_two );
    router.use( module_three );
    //...

    return router;

})();

Is there a way to read all them at once?

Jonathan Solorzano
  • 6,812
  • 20
  • 70
  • 131

2 Answers2

2

You could modify the answer from this SO post

var fs = require('fs'),
    path = require('path');

function loadAllModules(srcpath, router) {
  return fs.readdirSync(srcpath).filter(function(file) {
    if(fs.statSync(path.join(srcpath, file)).isDirectory()) {
      var module = require('./' + file);
      router.use(module)
    }
  });
}

And then use it like:

loadAllModules(__dirname, router)

module.exports = (function () {

    var express      = require( 'express' ),
        router       = express.Router();
    //...

    loadAllModules(__dirname, router);
    return router;

})();
Community
  • 1
  • 1
nbermudezs
  • 2,814
  • 1
  • 20
  • 20
2
https://www.npmjs.com/package/require-all

Check this module, if it fulfills your node.

We have used this module for requiring all Mongoose Schema And Controllers.

Update:

var controllers = require('require-all')({
    dirname     :  __dirname + '/server/rest-api/',
    filter      :  'index.js',
    recursive   : true
});
Hiren S.
  • 2,793
  • 15
  • 25