findOrAddChild 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;
}