cowboy的路由方式

直接贴代码

route_helper.erl

-module(route_helper).

-export([get_routes/0]).

get_routes() ->
    [
        {‘_‘, [
%%             路由的一些情况
            { "/catch_all_handler/[...]", catch_all_handler, [] },
            { "/:aa/:bb/[:c]", test_handler, [aaa] }
        ]}
    ].

catch_all_handler里面处理以catch_all_handler开始的所有url请求

catch_all_handler.erl

-module(catch_all_handler).

-export([init/3]).
-export([handle/2]).
-export([terminate/3]).

init(_Transport, Req, []) ->
    {ok, Req, undefined}.

handle(Req, State) ->
    {Path,_} = cowboy_req:path(Req),
    {PathList, _} = cowboy_req:path_info(Req),

    lists:foreach(
        fun(PathArg)->
            io:format("catch_all_handler path is ~p, args ~p~n",[Path,PathArg])
        end,
    PathList
    ),
    {ok, Req, State}.

terminate(_Reason, _Req, _State) ->
    ok.

test_handler.erl

-module(test_handler).

-export([init/3]).
-export([handle/2]).
-export([terminate/3]).

init(_Transport, Req, [Options]) ->
    io:format("options ~p~n",[Options]),
    {ok, Req, undefined}.

handle(Req, State) ->
    {PathInfo,_} = cowboy_req:path(Req),
    {Arg1,_} = cowboy_req:binding(aa,Req),
    {Arg2,_} = cowboy_req:binding(bb,Req),
    io:format("test_handler path is ~p, arg1 ~p,arg2 ~p~n",[PathInfo,Arg1,Arg2]),
    {ok, Req, State}.

terminate(_Reason, _Req, _State) ->
    ok.

init里面的Option就是aaa,cowboy_req:bing()来获取后面的url,[:c]为可选url,可以写,可以不写

时间: 2024-08-06 20:00:21

cowboy的路由方式的相关文章

Linux進取之旅2: 一个最基本的 LVS负载均衡架构及配置(NAT路由方式)

平台及环境: LVS1:    srv1.training.cc                       private_IP: 172.25.31.20/24    pub_IP :10.0.0.20/24    OS=rhel6.5 private_Virtual IP: 172.25.31.99/32       pub_Virtual IP:10.0.0.99/32 realserver1 :    srv2.training.cc             private_IP:17

Microsoft Azure中TrafficManager (流量管理器)的路由方式

目前Azure的流量管理器有三种可供选择的路由方式.尽管你可以在任何时间去选择任何路由方法,每个流量管理器的配置文件在同一个时间段只能使用一个路由方法. 值得注意的是,所有的流量路由的方法均包括端点监控.配置流量管理器配置文件指定最适合需求的流量路由方式之后,你需要配置监控设置.当监控配置正确,流量管理器将监视端点的状态,包括云服务和网站,不会发送流量到它认为是不可用的端点. 这三种流量管理器流量路由的方法是:(为了便于理解,这里都举出场景) 1,故障转移:你在相同或不同的Azure数据中心均有

非路由方式搭建隔离代理环境

环境准备:1.代理服务器(以windows为例,只需一块网卡即可),配置方法如下:     a)使用自动获取IP的方式得到网卡配置(eg:IP:*.*.*.* NETMASK:255.255.255.0 GATEWAY:*.*.*.*)     b)配置网卡为手动获取IP 填写刚刚获取的地址信息(DNS配置为 172.17.181.250)     c)点击[高级] 在IP地址栏再添加一个IP,此IP为自定义内网IP(最好不好和其他网段冲突)eg 配置如下:                   

Docker跨主机通信:桥接方式和路由方式

1.直接路由 通过在主机中添加静态路由来实现跨主机通信.如果有两台主机host1和host2,两主机上的docker容器是两个独立的二层网络,将con1发往con2的数据流先转发到主机host2上,再由host2转发到其上的docker容器中,反之亦然. 由于使用容器的IP进行路由,就需要避免不同主机上的docker容器使用相同冲突的IP,所有应该为不同的主机分配不同的IP子网. #主机A上:192.168.187.143,主机B:192.168.187.144 #S1:添加网卡docker0,

Win7下连接VPN后,采用添加路由方式自动区分国内国外

转:http://www.chinagfw.org/2012/03/vpn.html 连接VPN后有两大问题:1.国内部份网站打不开或打开慢:2.耗费VPN流量 连接上VPN使用效果: 步骤: 1.修改路由表 下载 pre_created_for_win.zip 解压,以管理员身份运行 vpnup.bat(注意一定要在连接VPN之前运行该文件).如果不以管理员身份运行,会报“The requested operation requires elevation.” 每添加一条正确的路由则会显示一条

Docker容器跨主机通信之:直接路由方式

概述 就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要.再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题.本文就来尝试一下. 方案原理分析 由于使用容器的IP进行路由,就

微信小程序详解——页面之间的跳转方式【路由】和参数传递

微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能.今天我们来研究小程序页面之间的跳转方式. 1.先导 在Android中,我们Activity和Fragment都有栈的概念在里面,微信小程序页面也有栈的概念在里面.微信小程序页面跳转有四种方式: 1.wx.navigateTo(OBJECT): 2.wx.redirectTo(OBJECT): 3.wx.switchTab(OBJECT): 4.wx.navi

Asp.Net Core下的两种路由配置方式

与Asp.Net Mvc创建区域的时候会自动为你创建区域路由方式不同的是,Asp.Net Core下需要自己手动做一些配置,但更灵活了. 我们先创建一个区域,如下图 然后我们启动访问/Manage/Home/Index 发现是404没有找到该页面,因为我们还没有为其配置路由,下面使用两种配置区域路由的方式 1.通过配置MapRoute app.UseMvc(routes => { routes.MapRoute( name: "default", template: "

CCNP路由实验之十六 策略路由(PBR)

?? 策略路由(PBR)是一种比基于目标网络进行路由更加灵活的数据包路由转发机制.路由器将通过路由图决定如何对需要路由的数据包进行处理,路由图决定了一个数据包的下一跳转发路由器.在路由器转发一个数据报文时,首先根据配置的规则对报文进行过滤,匹配成功则按照一定的转发策略进行报文转发.这种规则可以是基于标准和扩展访问控制列表,也可以基于报文的长度:而转发策略则是控制报文按照指定的策略路由表进行转发,也可以修改报文的IP优先字段,策略路由也可以在一定程度上实现流量工程,使不同服务质量的流或者不同性质的