findOrAddChild method

RouteNode findOrAddChild (RouteNode node, [ String method = DEFAULT_METHOD ])

查找或者添加节点,如果当前节点在子节点中可以被匹配到,则拿到对应节点,否则就添加节点到当前节点对应类型的子节点中 @param node 要添加的节点

Implementation

RouteNode findOrAddChild(final RouteNode node, [String method = DEFAULT_METHOD]) {
  // 在当前节点的子节点中匹配
  RouteNode _node = matchChildNode(node);

  // 如果已经存在当前key标识的节点
  if(_node != null) {
    node.middlewares[method] ??= [];
    // 添加处理器和添加中间件是互斥的操作,同时只会是一种操作
    if(node.middlewares[method].isNotEmpty) { // 这种情况是在添加中间件节点的时候触发
       _node.middlewares[method] ??= [];
      _node.middlewares[method].addAll(node.middlewares[method]);
    } else if(node.getHandler(method) != null && _node.getHandler(method) == null) { // 这种情况是当添加处理器节点的时候触发
      _node.setHandler(method, node.getHandler(method));
    }

    return _node;
  }

  switch(node.type) {
    case NodeType.param:
      paramChildren.add(node);
      break;
    case NodeType.part:
      partChildren[node.key] = node;
      break;
    case NodeType.wildcard:
      wildcardChild = node;
      break;
  }

  return node;
}