Clean up middleware; solidify support for route handler classes

This commit is contained in:
2020-09-04 10:46:08 -05:00
parent ff34578d07
commit 27ee1a552b
5 changed files with 53 additions and 4 deletions

View File

@@ -1,4 +1,6 @@
import AppClass from '../lifecycle/AppClass.ts'
import {Request} from './Request.ts'
import {RouteHandlerReturnValue} from '../unit/Routing.ts'
/**
* Base class for HTTP middleware.
@@ -6,4 +8,13 @@ import AppClass from '../lifecycle/AppClass.ts'
*/
export default class Middleware extends AppClass {
/**
* Handle the incoming request and apply this middleware.
* @param {Request} request
* @return RouteHandlerReturnValue
*/
public handleRequest(request: Request): RouteHandlerReturnValue {
return
}
}

View File

@@ -6,6 +6,7 @@ import {Request} from '../../Request.ts'
import ResponseFactory from '../../response/ResponseFactory.ts'
import {http, error} from '../../response/helpers.ts'
import {HTTPStatus} from '../../../const/http.ts'
import {isRouteHandlerClass} from "../../../unit/Routing.ts";
/**
* HTTP kernel module to apply route handlers to the incoming request.
@@ -47,7 +48,13 @@ export default class ApplyRouteHandlers extends Module {
let current_request: Request = request
for ( const handler of request.route.handlers ) {
try {
const result = await handler(current_request)
let result
if ( isRouteHandlerClass(handler) ) {
result = await handler.handleRequest(current_request)
} else {
result = await handler(current_request)
}
if ( result instanceof Request ) {
// If we got a request instance back, use that for further handlers
current_request = result