牛仔路由选项的目的是什么?

时间:2014-09-18 03:45:39

标签: erlang cowboy

牛仔routing guide表示每条路径都是一个元组,其中包含“初始化时将给予它[请求处理程序]的选项”。但它没有解释选项的目的,我不知道如何使用它们,因为传递给处理程序的Req对象包含有关路径及其绑定的信息。

因此,如果路由选项不包含任何唯一路径信息,那么它们具有哪些用例?

1 个答案:

答案 0 :(得分:4)

选项传递给处理程序init/3方法。在handlers guide中有使用翻译选项的示例。您可以使用多个路径指向同一个处理程序,使用不同的选项:

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

在处理程序中,你可以这样:

-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}.

另一个例子是从主机名获取语言。例如,您可以根据获得请求的主机检测语言。

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

您可以使用PathMatchHostMatch实现相同的目标,语言值绑定将在Req中,但选项更为通用。路由选项用于创建其他信息并将其传递给处理程序。