|
|
@@ -2,6 +2,7 @@ import * as controllers from './controllers/'
|
|
|
import * as middlewares from './middleware/'
|
|
|
import { routes } from './routes'
|
|
|
import express from 'express'
|
|
|
+import { ApiError } from './middleware/ApiError'
|
|
|
|
|
|
interface ControllerCollection {
|
|
|
[key: string]: any
|
|
|
@@ -13,8 +14,9 @@ const router = express.Router()
|
|
|
export function loadRoute(): express.Router {
|
|
|
for (const route of routes) {
|
|
|
const [controllerName, controllerAction] = route.action.split('@')
|
|
|
- const middlewareList = []
|
|
|
+ let middlewareList: Array<express.RequestHandler> = []
|
|
|
|
|
|
+ // Check whether controller exists
|
|
|
if (!isControllerInitialized(controllerName)) {
|
|
|
if (isControllerExisted(controllerName)) {
|
|
|
controllerInstances[controllerName] = new controllers[controllerName]()
|
|
|
@@ -24,13 +26,11 @@ export function loadRoute(): express.Router {
|
|
|
}
|
|
|
|
|
|
if (route.middlewares) {
|
|
|
- for (const middleware of route.middlewares) {
|
|
|
- if (!isMiddlewareExists(middleware)) {
|
|
|
- throw new Error(`Middleware ${middleware} not exist.`)
|
|
|
- }
|
|
|
+ middlewareList = getMiddlewareList(route.middlewares)
|
|
|
+ }
|
|
|
|
|
|
- middlewareList.push(middlewares[middleware])
|
|
|
- }
|
|
|
+ if (route.validator) {
|
|
|
+ middlewareList.push(...route.validator, ApiError)
|
|
|
}
|
|
|
|
|
|
switch (route.method) {
|
|
|
@@ -59,6 +59,20 @@ export function loadRoute(): express.Router {
|
|
|
return router
|
|
|
}
|
|
|
|
|
|
+function getMiddlewareList(middlewareNames: Array<string>): Array<express.RequestHandler> {
|
|
|
+ const middlewareList = []
|
|
|
+
|
|
|
+ for (const middlewareName of middlewareNames) {
|
|
|
+ if (!isMiddlewareExists(middlewareName)) {
|
|
|
+ throw new Error(`Middleware ${middlewareName} not exist.`)
|
|
|
+ }
|
|
|
+
|
|
|
+ middlewareList.push(middlewares[middlewareName])
|
|
|
+ }
|
|
|
+
|
|
|
+ return middlewareList
|
|
|
+}
|
|
|
+
|
|
|
function isControllerInitialized(controller: string): boolean {
|
|
|
return controller in controllerInstances
|
|
|
}
|