43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
/*
|
||
* @Description:
|
||
* @Author: ZY
|
||
* @Date: 2020-12-10 10:09:06
|
||
* @LastEditors: ZY
|
||
* @LastEditTime: 2020-12-10 14:41:18
|
||
*/
|
||
import 'reflect-metadata'
|
||
import fs from 'fs'
|
||
import path from 'path'
|
||
import {ROUTER_MAP, BASE_PATH_MAP} from './constant'
|
||
import {RouteMeta, PathMeta} from './type'
|
||
import Router from 'koa-router'
|
||
|
||
const addRouter = (router: Router) => {
|
||
const ctrPath = path.join(__dirname, 'controller');
|
||
const modules: ObjectConstructor[] = [];
|
||
// 扫描controller文件夹,收集所有controller
|
||
fs.readdirSync(ctrPath).forEach(name => {
|
||
if (/^[^.]+\.(t|j)s$/.test(name)) {
|
||
modules.push(require(path.join(ctrPath, name)).default)
|
||
}
|
||
});
|
||
|
||
// 结合meta数据添加路由 和 验证
|
||
modules.forEach(m => {
|
||
const routerMap: RouteMeta[] = Reflect.getMetadata(ROUTER_MAP, m, 'method') || [];
|
||
const basePathMap: PathMeta[] = Reflect.getMetadata(BASE_PATH_MAP, m) || [];
|
||
const basePath:PathMeta = basePathMap.pop();
|
||
if (routerMap.length) {
|
||
const ctr = new m();
|
||
routerMap.forEach(route => {
|
||
// const {name, method, path, isVerify} = route;
|
||
const {name, method, path} = route;
|
||
const newPath:String = basePath ? (basePath.path + path) : path;
|
||
// router[method](newPath, jwt(newPath, isVerify), ctr[name]);
|
||
router[method](newPath, ctr[name]);
|
||
})
|
||
}
|
||
})
|
||
}
|
||
|
||
export default addRouter |