Clean up middleware; solidify support for route handler classes
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user