handleRequest method

Future handleRequest(
  1. HttpRequest request
)

Implementation

Future handleRequest(HttpRequest request) async {
  final endpoint = Uri.parse(request.requestedUri.toString()).path;
  String statusCode = '';
  if(this.filetypes.contains(p.extension(endpoint).replaceFirst('.',''))){
    try{
      final path = endpoint.replaceFirst('/', '${Directory.current.path.replaceAll('\\','/')}/');
      File file = File.fromUri(Uri.file(path));
      final mimeType = lookupMimeType(path)!.split('/');
      request.response
        ..headers.contentType = ContentType(mimeType[0],mimeType[1])
        ..statusCode = 200;
      file.openRead().pipe(request.response);
      statusCode = '200 [OK]';
    }catch(e,s){
      print(e);
      print(s);
      request.response
        ..statusCode = 500
        ..close();
      statusCode = '500 [INTERNAL SERVER ERROR]';
    }
    print("${_host.address} - - [${ServerUtils.printDateTime()}] '${request.method} ${endpoint} HTTP/${request.protocolVersion}' $statusCode");
    return;
  }

  if(endpoint==""||endpoint=="/"){
    final res = await routes[RegExp(r'^/$')]!.call(request,URIHandler.parsePath(routes[RegExp(r'^/$')]!.path,endpoint));
    request.response
      ..headers.contentType = ContentType.html
      ..statusCode = 200
      ..write(res)
      ..close();
    statusCode = '200 [OK]';
    print("${_host.address} - - [${ServerUtils.printDateTime()}] '${request.method} ${endpoint} HTTP/${request.protocolVersion}' $statusCode");
    return;
  }

  try{
    final route = routes.keys.firstWhere((element) => element.hasMatch(endpoint));
    try{
      final res = await routes[route]!.call(request,URIHandler.parsePath(routes[route]!.path,endpoint));
      request.response
        ..statusCode = 200
        ..headers.contentType = ContentType.html
        ..write(res)
        ..close();
      statusCode = '200 [OK]';
    }catch(e){
      request.response
        ..statusCode = 500
        ..write("Internal server error")
        ..close();
      statusCode = '500 [INTERNAL SERVER ERROR]';
    }
  }catch(e){
    request.response
      ..statusCode = 400
      ..write("Malformed URL.")
      ..close();
    statusCode = '400 [BAD REQUEST]';
  }

  print("${_host.address} - - [${ServerUtils.printDateTime()}] '${request.method} ${endpoint} HTTP/${request.protocolVersion}' $statusCode");
}