中介绍了当找到对应的路由后Router::handle
template<typename App>
typename std::enable_if<std::tuple_size<typename App::mw_container_t>::value != 0, void>::type
handle_rule(BaseRule* rule, crow::request& req, crow::response& res, const crow::routing_params& rp)
{
if (!rule->mw_indices_.empty())
{
...
}
}
template<typename... Middlewares>
class Crow
{
using mw_container_t = std::tuple<Middlewares...>;
};
struct middleware_indices
{
bool empty() const
{
return indices_.empty();
}
private:
std::vector<int> indices_;
}
当Crow类中有插件时,会调用这个版本的handle_rule
而改handle_rule会先判断mw_indices_是否为空
也就是