Task: Add reflection metadata for decorators and add basic implements for controller and express application and constants and app
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-09-14 09:06:03 +07:00
parent a6546b7676
commit 67c94211e7
13 changed files with 148 additions and 46 deletions

52
src/application.ts Normal file
View File

@@ -0,0 +1,52 @@
import express, { Application as ExpressApp, Handler } from "express"
import { controllers } from "./controller"
import { RouteHandler } from "./decorators/handlers.decorator"
import { MetadataKeys } from "./constants/metadata.keys"
class Application {
private readonly _instance: ExpressApp
get instance(): ExpressApp {
return this._instance
}
constructor() {
this._instance = express()
this.registerRoutes()
}
private registerRoutes(): void {
const info: Array<{ api: string; handler: string }> = []
controllers.forEach((controller) => {
const controllerInstance: { [handlerName: string]: Handler } =
new controller() as any
const basePath: string = Reflect.getMetadata(
MetadataKeys.BASE_PATH,
controller
)
const routers: RouteHandler[] = Reflect.getMetadata(
MetadataKeys.ROUTERS,
controller
)
const exRouter = express.Router()
routers.forEach(({ method, path, handlerName }) => {
exRouter[method](
path,
controllerInstance[String(handlerName)]
).bind(controllerInstance)
info.push({
api: `${method.toLocaleUpperCase()} ${basePath + path}`,
handler: `${controller.name}.${String(handlerName)}`,
})
})
this._instance.use(basePath, exRouter)
})
console.table(info)
}
}
export default new Application()