|
|
|
@ -4,7 +4,8 @@ import Kernel from '../Kernel.ts'
|
|
|
|
|
import {Logging} from '../../../service/logging/Logging.ts'
|
|
|
|
|
import {Request} from '../../Request.ts'
|
|
|
|
|
import ResponseFactory from '../../response/ResponseFactory.ts'
|
|
|
|
|
import ErrorResponseFactory from "../../response/ErrorResponseFactory.ts";
|
|
|
|
|
import {http, error} from '../../response/helpers.ts'
|
|
|
|
|
import {HTTPStatus} from '../../../const/http.ts'
|
|
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export default class ApplyRouteHandlers extends Module {
|
|
|
|
@ -19,12 +20,19 @@ export default class ApplyRouteHandlers extends Module {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async apply(request: Request): Promise<Request> {
|
|
|
|
|
if (
|
|
|
|
|
!request.route
|
|
|
|
|
|| !request.route.handlers
|
|
|
|
|
|| request.route.handlers.length < 1
|
|
|
|
|
) {
|
|
|
|
|
return request
|
|
|
|
|
if ( !request.route ) { // Route not found
|
|
|
|
|
const factory = http(HTTPStatus.NOT_FOUND)
|
|
|
|
|
return await factory.write(request)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( !Array.isArray(request.route.handlers) ) { // Route found but invalid HTTP method
|
|
|
|
|
const factory = http(HTTPStatus.METHOD_NOT_ALLOWED)
|
|
|
|
|
return await factory.write(request)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( request.route.handlers.length < 1 ) { // Route and method found, but no handlers
|
|
|
|
|
const factory = http(HTTPStatus.NOT_IMPLEMENTED)
|
|
|
|
|
return await factory.write(request)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let current_request: Request = request
|
|
|
|
@ -43,8 +51,8 @@ export default class ApplyRouteHandlers extends Module {
|
|
|
|
|
this.logger.error(e)
|
|
|
|
|
|
|
|
|
|
// TODO determine response type (html | json, &c.)
|
|
|
|
|
const error_response: ErrorResponseFactory = this.make(ErrorResponseFactory, e)
|
|
|
|
|
return await error_response.write(request)
|
|
|
|
|
const factory = error(e)
|
|
|
|
|
return await factory.write(request)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|