2014-09-18 3 views
2

카우보이 routing guide은 각 경로가 "초기화시 요청 처리자에게 부여 될 옵션"을 포함하는 튜플로 구성되어 있다고 말합니다. 그러나 옵션의 목적을 설명하지는 않으며 핸들러에 전달 된 Req 객체가 경로와 바인딩에 대한 정보를 포함하고 있으므로 사용 방법을 잘 모릅니다.카우보이의 라우팅 옵션의 목적은 무엇입니까?

라우팅 옵션에 고유 한 경로 정보가 포함되지 않은 경우 사용 사례에는 어떤 것이 있습니까?

답변

4

옵션은 처리기 init/3 메서드에 전달됩니다. handlers guide에는 번역 옵션을 사용하는 예가 있습니다. 당신은 다른 옵션과 동일한 핸들러를 가리키는 여러 경로를 가질 수 있습니다

-record(state, { 
    lang :: en | fr 
    %% More fields here. 
}). 

init(_Type, Req, Opts) -> 
    {_, Lang} = lists:keyfind(lang, 1, Opts), 
    {ok, Req, #state{lang=Lang}}. 

handle(Req, State#state{lang = Lang}) -> 
    {ok, Req2} = cowboy_req:reply(200, [ 
     {<<"content-type">>, <<"text/plain">>} 
    ], translate_text(<<"Hello World!">>, Lang), Req), 
    {ok, Req2, State}. 

는 또 다른 예는 호스트 이름에서 언어를 취하고있다 : 핸들러에서

{"/pl", toppage_handler, [{lang, fr}]} 
{"/en", toppage_handler, [{lang, en}]} 

, 당신이 뭔가를 가질 수있다. 예를 들어 요청을받은 호스트를 기반으로 언어를 감지 할 수 있습니다.

[{'fr.example.org', [ 
     {"/", toppage_handler, [{lang, fr}] 
    ]}, 
    {'en.example.org', [ 
     {"/", toppage_handler, [{lang, en}] 
]. 

당신은 Req에있을 것입니다 바인딩 PathMatchHostMatch 및 언어 값을 사용하여, 동일한 달성 할 수 있지만, 옵션이 더 일반적이다. 라우팅 옵션은 추가 정보를 만들고이를 처리기에 전달하는 데 사용됩니다.

관련 문제