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
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
52
src/application.ts
Normal file
52
src/application.ts
Normal 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()
|
||||
Reference in New Issue
Block a user