handleRequest method
Implementation
Future handleRequest(HttpRequest request) async {
int start = new DateTime.now().millisecondsSinceEpoch;
int serviceId = config.getRequired<int>('service_id');
String actionName = 'unknown';
HttpAction? action = routing.getForRequest(request);
int queries = 0;
if (action == null) {
writeError(request, HttpStatus.notFound, request.uri.toString());
} else {
try {
actionName = action.className;
await action.handleRequest();
} on Redirect catch (error) {
request.response.redirect(new Uri.http(request.uri.authority, error.uri));
} on HttpException catch (error, stacktrace) {
writeError(request, error.code, error.message, trace: stacktrace);
} catch (error, stacktrace) {
writeError(
request,
HttpStatus.internalServerError,
'unknown error occured',
trace: stacktrace
);
await errorHandler.handleError(action.db, serviceId, 'action.' + actionName, error, stacktrace);
} finally {
queries = action.db.counter;
await action.db.disconnect();
}
}
request.response.close();
int timeMs = new DateTime.now().millisecondsSinceEpoch - start;
if (action != null) {
await stats.saveStats(
serviceId, 'action', action, timeMs
);
await action.db.disconnect();
}
print("${request.method} ${request.uri} ${request.response.statusCode} [${timeMs}ms] [$queries]");
}