call method

FutureOr<Response> call(
  1. Request request
)

Route incoming requests to registered handlers.

This method allows a Router instance to be a Handler.

Implementation

FutureOr<Response> call(Request request) async {
  var nodeResult = _getRoute(request.method,'/${request.url.path}');

  if(nodeResult._node != null){
    var params = nodeResult._params;
    var middleware = nodeResult._middleware;
    request = request.change(context: {'arowana/params': params});

    middleware ??= ((Handler fn) => fn);

    return await middleware((request) async {
      var _handler = nodeResult._handle;
      if (_handler is Handler) {
        return await _handler.call(request);
      }

      if(_handler != null && params != null){
        return await Function.apply(_handler, [
          request,
          ...params.values,
        ]);
      }
      return _notFoundHandler(request);
    })(request);
  }
  return _notFoundHandler(request);
}