addMiddlewares method

void addMiddlewares (String path, List<RouteMiddleware> middlewares, [ String method = DEFAULT_METHOD ])

Implementation

void addMiddlewares(String path, List<RouteMiddleware> middlewares,
    [String method = DEFAULT_METHOD]) {
  assert(path != '' && middlewares != null && middlewares.isNotEmpty);

  if (path == '/') {
    root.middlewares[method] ??= [];
    root.middlewares[method].addAll(middlewares.map(
        (RouteMiddleware middleware) =>
            RouteMiddlewareWrap(_middlewareSeq++, middleware)));
    return;
  }

  final Uri uri = Uri.parse(path);
  // 使用 / 拆分路径
  List<String> nodeKeys = uri.pathSegments;
  // 设置当前节点为根节点
  RouteNode currentNode = root;
  // 遍历所有的节点
  for (int i = 0, len = nodeKeys.length; i < len; i++) {
    final String nodeKey = nodeKeys[i];

    assert(nodeKey != '');

    RouteNode node = RouteNode(nodeKey, level: i + 1, parent: currentNode);

    if (i == len - 1) {
      node.middlewares[method] ??= [];
      // 此处所有的节点都不会有处理器
      node.middlewares[method].addAll(middlewares.map(
          (RouteMiddleware middleware) =>
              RouteMiddlewareWrap(_middlewareSeq++, middleware)));
    }

    // 记录当前节点
    currentNode = currentNode.findOrAddChild(node);
  }
}