HTTP errors for not found, not implemented, method not allowed
This commit is contained in:
parent
f1c4fbdb95
commit
48ead77765
2
TODO.txt
2
TODO.txt
@ -24,6 +24,4 @@ documentation & docs site
|
||||
events and observables?
|
||||
no matching route handler
|
||||
request timeout
|
||||
not handlers -> not implemented
|
||||
method not allowed
|
||||
error response handler figure out json
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,9 +5,9 @@ import ErrorResponseFactory from './ErrorResponseFactory.ts'
|
||||
import {Rehydratable} from '../../support/Rehydratable.ts'
|
||||
import DehydratedStateResponseFactory from './DehydratedStateResponseFactory.ts'
|
||||
import TemporaryRedirectResponseFactory from './TemporaryRedirectResponseFactory.ts'
|
||||
import {HTTPStatus} from "../../const/http.ts";
|
||||
import HTTPErrorResponseFactory from "./HTTPErrorResponseFactory.ts";
|
||||
import HTTPError from "../../error/HTTPError.ts";
|
||||
import {HTTPStatus} from '../../const/http.ts'
|
||||
import HTTPErrorResponseFactory from './HTTPErrorResponseFactory.ts'
|
||||
import HTTPError from '../../error/HTTPError.ts'
|
||||
|
||||
export function json(value: any): JSONResponseFactory {
|
||||
return make(JSONResponseFactory, value)
|
||||
@ -30,6 +30,6 @@ export function redirect(destination: string): TemporaryRedirectResponseFactory
|
||||
return make(TemporaryRedirectResponseFactory, destination)
|
||||
}
|
||||
|
||||
export function http(status: HTTPStatus, message?: string) {
|
||||
export function http(status: HTTPStatus, message?: string): HTTPErrorResponseFactory {
|
||||
return make(HTTPErrorResponseFactory, new HTTPError(status, message))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user