refactor endpoints register & middleware query

This commit is contained in:
srgooglo 2021-07-08 11:48:33 +02:00
parent b97d906813
commit 6414dba098

View File

@ -86,30 +86,39 @@ class Server {
} }
} }
registerEndpoint(method, route, controller) { registerEndpoint(endpoint) {
if (typeof controller === "function") { if (typeof endpoint.controller === "function") {
controller = new classes.Controller(route, controller) endpoint.controller = new classes.Controller(endpoint.route, endpoint.controller)
} }
const endpoint = { method: method, route: route, controller: controller } this.endpoints[endpoint.route] = endpoint
this.routes.push(endpoint.route)
this.endpoints[route] = endpoint this.httpServer[endpoint.method.toLowerCase()](endpoint.route, (req, res, next) => this.handleRequest(req, res, next, endpoint))
this.routes.push(route)
this.httpServer[method.toLowerCase()](route, (req, res, next) => this.handleRequest(req, res, next, endpoint))
} }
handleRequest = (req, res, next, endpoint) => { handleRequest = (req, res, next, endpoint) => {
const { route, method, controller } = endpoint const { route, controller } = endpoint
req.requestId = nanoid() req.requestId = nanoid()
req.endpoint = endpoint req.endpoint = endpoint
// exec middleware before controller // exec middleware before controller
if (typeof controller.middleware !== "undefined") { if (typeof endpoint.middleware !== "undefined") {
if (typeof this.middlewares[controller.middleware] === "function") { let query = []
this.middlewares[controller.middleware](req, res, next)
if (endpoint.middleware === "string") {
query.push(endpoint.middleware)
} }
if (Array.isArray(endpoint.middleware)) {
query = endpoint.middleware
}
query.forEach((middleware) => {
if (typeof this.middlewares[middleware] === "function") {
this.middlewares[middleware](req, res, next)
}
})
} }
// exec controller // exec controller
@ -214,7 +223,10 @@ class Server {
} }
// append to server // append to server
this.registerEndpoint(method, route, new classes.Controller(route, controller[fn])) this.registerEndpoint({
...endpoint,
controller: new classes.Controller(route, controller[fn])
})
} catch (error) { } catch (error) {
runtime.logger.dump(error) runtime.logger.dump(error)
console.error(error) console.error(error)
@ -224,7 +236,10 @@ class Server {
} }
// register root resolver // register root resolver
this.registerEndpoint("get", "/", (req, res) => { this.registerEndpoint({
method: "get",
route: "/",
controller: (req, res) => {
// here server origin resolver // here server origin resolver
res.json({ res.json({
id: this.id, id: this.id,
@ -233,9 +248,13 @@ class Server {
time: new Date().getTime(), time: new Date().getTime(),
version: SERVER_VERSION version: SERVER_VERSION
}) })
}
}) })
this.registerEndpoint("get", "/map", (req, res) => { this.registerEndpoint({
method: "get",
route: "/map",
controller: (req, res) => {
const methods = {} const methods = {}
this.routes.forEach((route) => { this.routes.forEach((route) => {
@ -250,6 +269,7 @@ class Server {
routes: this.routes, routes: this.routes,
methods: methods methods: methods
}) })
}
}) })
this.httpServer.listen(this.port, () => { this.httpServer.listen(this.port, () => {