1.0.2 • Published 5 years ago

@orgiltse/service v1.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

import { Router } from "express"; import fs from "fs"; import path from "path"; import controller from "../utils/controller"; export const requirePath = basedir => (dirpath, _routers = [], action = "", onlyRoute) => { try { let isDirectory = false; let ROUTE; const accepted = (route) => { return !_routers.find(router => { return router.path === route.path && router.method === route.method; }); }; try { isDirectory = fs.lstatSync(path.normalize(basedir + "/" + dirpath)).isDirectory(); } catch (err) { isDirectory = false; } if (isDirectory) { fs.readdirSync(basedir + "/" + dirpath).forEach(file => { let subpath = basedir + "/" + dirpath + "/" + file; let filename = path.normalize(file).replace(/.^/.+$/, ""); if (fs.lstatSync(path.normalize(subpath)).isDirectory()) { if (file === "logics" || file === "interface") return; // eslint-disable-next-line no-param-reassign
_routers = requirePath(basedir)(path.normalize("/" + dirpath + "/" + file), _routers, action + "/" + filename); } else if (file.indexOf(".js.map") == -1) { let obj = require(subpath); Object.keys(obj).forEach(key => { let model = objkey; if (Array.isArray(model)) { let path = model0 || action + "/" + filename, // Path
method = model1, // Method
func = model2; // Function
ROUTE = { path: path, method: method, func: func }; if (accepted(ROUTE)) _routers.push(ROUTE); } else if (model) { // ONLY HTTP POST
ROUTE = { path: action + "/" + filename, method: "POST", func: model }; if (accepted(ROUTE)) _routers.push(ROUTE); } }); } }); } else { let obj = require(path.normalize(basedir + "/" + dirpath)); Object.keys(obj).forEach(key => { let model = objkey; if (Array.isArray(model)) { let path = model0 || onlyRoute, // Path
method = model1, // Method
func = model2; // Function
ROUTE = { path: path, method: method, func: func }; if (accepted(ROUTE)) _routers.push(ROUTE); } else if (model) { // ONLY HTTP POST
ROUTE = { path: onlyRoute, method: "POST", func: model }; if (accepted(ROUTE)) _routers.push(ROUTE); } }); } } catch (err) { throw err; } return _routers; }; export default (basedir, data) => { const router = new Router(); const routes = (Array.isArray(data) ? data : data).reduce((accumulator, iterator) => { return [...accumulator, ...requirePath("")(path.join(basedir, iterator), [], "", iterator)]; }, []); routes.forEach(route => { routerroute.method.toLowerCase()(route.path, controller(route.func)); }); return router; };