run method

Future<void> run()

Implementation

Future<void> run() async {
  _logger.info('Start server...');

  final server = await HttpServer.bind("0.0.0.0", port);

  _logger.info('Server started: http://0.0.0.0:$port');

  await server.forEach((HttpRequest request) async {
    _logger.detail('Request path: ${request.uri.path}');
    try {
      if (request.uri.path.startsWith(apiPath)) {
        // set default status code
        request.response.statusCode = HttpStatus.badRequest;
        // run routes method
        await _routes
            .where((element) => request.uri.path.startsWith(
                element.path.contains('{') ? element.path.substring(0, element.path.indexOf('{')) : element.path))
            .first
            .run(request);
        // check if method not found
        if (request.response.statusCode == HttpStatus.badRequest) {
          throw AppException.badRequest();
        }
        // close
        await request.response.close();
      } else {
        await HomeRoute(path).run(request);
      }
    } catch (e) {
      if (e is AppException) {
        if (e.validates == null) {
          request.writeJsonWithCode(e.code, {
            'code': e.code,
            'message': e.message,
          });
        } else {
          request.writeJsonWithCode(e.code, {
            'code': e.code,
            'message': e.message,
            'validates': e.validates,
          });
        }
      } else {
        request.writeJsonWithCode(HttpStatus.internalServerError, {
          'code': HttpStatus.internalServerError,
          'message': e.toString(),
        });
      }
      await request.response.close();
    }
  });
}