cowboy의 루트 방식

3771 단어 BO
직접 부호 붙이기
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,cowboyreq:bing()로 뒤에 있는 URL을 가져옵니다. [:c]는 선택할 수 있는 URL입니다. 쓸 수 있고 안 쓸 수 있습니다.

좋은 웹페이지 즐겨찾기