diff --git a/index.route.js b/index.route.js index 46d977d6..0c2f69dd 100644 --- a/index.route.js +++ b/index.route.js @@ -1,20 +1,41 @@ const express = require('express'); -const userRoutes = require('./server/user/user.route'); -const authRoutes = require('./server/auth/auth.route'); +const glob = require('glob'); +const path = require('path'); const router = express.Router(); // eslint-disable-line new-cap -// TODO: use glob to match *.route files - /** GET /health-check - Check service health */ router.get('/health-check', (req, res) => res.send('OK') ); -// mount user routes at /users -router.use('/users', userRoutes); +// Mount routes defined in *.route.js files +mountRoutes(); + +/** +* Mounts all routes defined in *.route.js files in server/ +* @example +* auth.route.js routes will be mounted to /auth +* @example +* user.test.js routes will be mounted to /user +*/ +function mountRoutes() { + // Route definitions + const files = glob.sync('server/**/*.route.js'); + + // Mount routes for each file + files.forEach((routeFilename) => { + const routes = require(`./${routeFilename}`); // eslint-disable-line global-require + + // Create the url using the first part of the filename + // e.g. auth.route.js will generate /auth + const routeName = path.basename(routeFilename, '.route.js'); + const url = `/${routeName}`; -// mount auth routes at /auth -router.use('/auth', authRoutes); + // Mount the routes + console.info(`${path.basename(routeFilename)} -> ${url}`); // eslint-disable-line no-console + router.use(url, routes); + }); +} module.exports = router; diff --git a/package.json b/package.json index 788d864c..0451a9d8 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "express-jwt": "5.3.1", "express-validation": "1.0.2", "express-winston": "2.5.0", + "glob": "false7.1.2", "helmet": "3.12.0", "http-status": "1.0.1", "joi": "10.6.0", diff --git a/server/user/user.controller.js b/server/users/users.controller.js similarity index 97% rename from server/user/user.controller.js rename to server/users/users.controller.js index 84691e68..c0f6bf62 100644 --- a/server/user/user.controller.js +++ b/server/users/users.controller.js @@ -1,4 +1,4 @@ -const User = require('./user.model'); +const User = require('./users.model'); /** * Load user and append to req. diff --git a/server/user/user.model.js b/server/users/users.model.js similarity index 100% rename from server/user/user.model.js rename to server/users/users.model.js diff --git a/server/user/user.route.js b/server/users/users.route.js similarity index 66% rename from server/user/user.route.js rename to server/users/users.route.js index 202905f2..8e04fb0f 100644 --- a/server/user/user.route.js +++ b/server/users/users.route.js @@ -1,28 +1,28 @@ const express = require('express'); const validate = require('express-validation'); const paramValidation = require('../../config/param-validation'); -const userCtrl = require('./user.controller'); +const usersCtrl = require('./users.controller'); const router = express.Router(); // eslint-disable-line new-cap router.route('/') /** GET /api/users - Get list of users */ - .get(userCtrl.list) + .get(usersCtrl.list) /** POST /api/users - Create new user */ - .post(validate(paramValidation.createUser), userCtrl.create); + .post(validate(paramValidation.createUser), usersCtrl.create); router.route('/:userId') /** GET /api/users/:userId - Get user */ - .get(userCtrl.get) + .get(usersCtrl.get) /** PUT /api/users/:userId - Update user */ - .put(validate(paramValidation.updateUser), userCtrl.update) + .put(validate(paramValidation.updateUser), usersCtrl.update) /** DELETE /api/users/:userId - Delete user */ - .delete(userCtrl.remove); + .delete(usersCtrl.remove); /** Load user when API with userId route parameter is hit */ -router.param('userId', userCtrl.load); +router.param('userId', usersCtrl.load); module.exports = router; diff --git a/server/user/user.test.js b/server/users/users.test.js similarity index 100% rename from server/user/user.test.js rename to server/users/users.test.js