call method

void call(
  1. Context ctx
)

Implementation

void call(Context ctx) async {
  final matcher = new RouteMatcher();

  var uriParts = uri.split('/');
  uriParts.removeWhere((str) => str.isEmpty);
  var pathParts = ctx.req.requestedUri.path.split('/');
  pathParts.removeWhere((str) => str.isEmpty);
  final minLength = min(uriParts.length, pathParts.length);
  uriParts = uriParts.sublist(0, minLength);
  pathParts = pathParts.sublist(0, minLength);

  print(uriParts.join('/') + '=' + pathParts.join('/'));

  matcher.match(uriParts.join('/'), pathParts.join('/'));
  if (matcher.matched) {
    var path = ctx.req.requestedUri.path;
    if (directory != this.uri) {
      path = path.replaceFirst(this.uri, directory);
    }
    final uri = Uri.parse(_dir + path);
    var file = File.fromUri(uri);
    final fileExists = file.existsSync();
    if (!fileExists) {
      final uri = Uri.parse(_dir + directory + '/' + index);
      file = File.fromUri(uri);
    }
    final mime = lookupMimeType(file.path);
    ctx.res.headers.add('content-type', mime!);
    ctx.res.statusCode = 200;
    await ctx.res.response.addStream(file.openRead());
    ctx.res.close();
  }
}