UNPKG

ncc-prototype-email-alerts-sub

Version:

Northumberland Council Front End Email Alerts Subscription Prototype

51 lines (43 loc) 1.99 kB
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; };