handleRequest method

Future handleRequest(
  1. HttpRequest request
)

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]");
}