ncc-prototype-email-alerts-sub
Version:
Northumberland Council Front End Email Alerts Subscription Prototype
51 lines (43 loc) • 1.99 kB
text/typescript
import { NextFunction } from 'connect';
import { Request, Response, Router } from 'express'
import klawSync from 'klaw-sync'
import { join } from 'path'
import logger from './logger';
const ROUTES_PATH = join(__dirname, '../routes');
export const setupRoutes = () => {
const router = Router();
klawSync(ROUTES_PATH, { nodir: true })
.filter((file) => file.path.toLowerCase().includes('route.js') || file.path.toLowerCase().includes('route.ts'))
.forEach(async ({ path }) => {
const file = path.replace(ROUTES_PATH, '');
try {
const route = await import(path); //inline require
const routeConfig = route.route;
switch (routeConfig.type.toLowerCase()) {
case 'root':
//sets up default page/get handler
router.get(routeConfig.route, (req: Request, res: Response) => routeConfig.controller(req, res, routeConfig.validators));
logger.info('Root pages router registered');
break;
case 'post':
router.post(routeConfig.route, (req: Request, res: Response, next: NextFunction) => routeConfig.controller(req, res, next, routeConfig.validators));
logger.info(`POST Route ${routeConfig.route} registered`)
break;
case 'page':
logger.info(`PAGE Route ${routeConfig.route} registered`)
//Does not need explicit handler, handled by root
break;
case 'get':
//Should only be used when custom page handler needed
router.get(routeConfig.route, (req: Request, res: Response, next: NextFunction) => routeConfig.controller(req, res, next, routeConfig.validators));
logger.info(`GET Route ${routeConfig.route} registered`)
break;
default:
throw Error('Invalid or Missing Page Type');
}
} catch (err) {
console.error(`Error bootstrapping route: ${file} -> ${err}`);
}
});
return router;
};