requestHandler method
Implementation
Future<void> requestHandler(HttpRequest request) async {
final errorListeners = <void Function(
HttpRequest request,
Object? error,
StackTrace stackTrace,
)>[];
try {
final extras = <String, Object?>{};
/// Check Global services
for (final controller in controllers) {
errorListeners.add(controller.onError);
final behavior = await controller.onRequest(request);
if (!behavior.next) {
return;
}
extras.addAll(behavior.extra);
}
/// Find route if request is not cut off from services
final (routeMapper, pathParameters) = findRoute(request);
///! Check route is founded
if (routeMapper == null) {
if (onRouteNotFound != null) {
onRouteNotFound!(request);
return;
}
await request.response.notFound();
return;
}
///! check methods is allowed for route
else if (!routeMapper.route.methods.contains(request.method)) {
await request.response.methodNotAllowed();
return;
}
for (final controller in routeMapper.controllers) {
errorListeners.add(controller.onError);
final behavior = await controller.onRequest(request);
if (!behavior.next) {
return;
}
extras.addAll(behavior.extra);
}
final payload = HttpRoutePayload(
extras: extras,
pathParameters: pathParameters,
);
await routeMapper.route.handler!(request, payload);
} catch (error, stack) {
/// Call services
for (final callback in errorListeners) {
callback(request, error, stack);
}
///
if (onError != null) {
onError!(request, error, stack);
return;
}
await request.response.internalServerError();
}
}