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